- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / history / android / visit_sql_handler_unittest.cc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <vector>
6
7 #include "chrome/browser/history/android/visit_sql_handler.h"
8
9 #include "base/files/file_path.h"
10 #include "base/files/scoped_temp_dir.h"
11 #include "base/strings/stringprintf.h"
12 #include "base/strings/utf_string_conversions.h"
13 #include "chrome/browser/history/android/urls_sql_handler.h"
14 #include "chrome/browser/history/history_database.h"
15 #include "chrome/common/chrome_constants.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 using base::Time;
19 using base::TimeDelta;
20
21 namespace history {
22
23 class VisitSQLHandlerTest : public testing::Test {
24  public:
25   VisitSQLHandlerTest()
26       : urls_sql_handler_(&history_db_),
27         visit_sql_handler_(&history_db_) {
28   }
29   virtual ~VisitSQLHandlerTest() {}
30
31  protected:
32   virtual void SetUp() {
33     // Get a temporary directory for the test DB files.
34     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
35     base::FilePath history_db_name = temp_dir_.path().AppendASCII(
36         chrome::kHistoryFilename);
37     ASSERT_EQ(sql::INIT_OK, history_db_.Init(history_db_name));
38   }
39
40   virtual void TearDown() {
41   }
42
43   HistoryDatabase history_db_;
44   base::ScopedTempDir temp_dir_;
45   UrlsSQLHandler urls_sql_handler_;
46   VisitSQLHandler visit_sql_handler_;
47
48  private:
49   DISALLOW_COPY_AND_ASSIGN(VisitSQLHandlerTest);
50 };
51
52 // Insert a url with only url set to verify no visit was inserted in visit
53 // table.
54 TEST_F(VisitSQLHandlerTest, InsertURL) {
55   HistoryAndBookmarkRow row;
56   row.set_raw_url("http://google.com");
57   row.set_url(GURL("http://google.com"));
58
59   ASSERT_TRUE(urls_sql_handler_.Insert(&row));
60   ASSERT_TRUE(visit_sql_handler_.Insert(&row));
61
62   URLRow url_row;
63   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
64
65   // Noting should be inserted to visit table.
66   VisitVector visits;
67   ASSERT_TRUE(history_db_.GetVisitsForURL(row.url_id(), &visits));
68   EXPECT_EQ(0u, visits.size());
69 }
70
71 // Insert a url with last visit time set to verify a visit was inserted.
72 TEST_F(VisitSQLHandlerTest, InsertURLWithLastVisitTime) {
73   HistoryAndBookmarkRow row;
74   row.set_raw_url("http://google.com");
75   row.set_url(GURL("http://google.com"));
76   row.set_last_visit_time(Time::Now());
77
78   ASSERT_TRUE(urls_sql_handler_.Insert(&row));
79   ASSERT_TRUE(visit_sql_handler_.Insert(&row));
80
81   URLRow url_row;
82   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
83
84   VisitVector visits;
85   ASSERT_TRUE(history_db_.GetVisitsForURL(row.url_id(), &visits));
86   EXPECT_EQ(1u, visits.size());
87   EXPECT_EQ(row.last_visit_time(), visits[0].visit_time);
88 }
89
90 // Insert a urls with created time to verify the a visit was inserted.
91 TEST_F(VisitSQLHandlerTest, InsertURLWithCreatedTime) {
92   HistoryAndBookmarkRow row;
93   row.set_raw_url("http://google.com");
94   row.set_url(GURL("http://google.com"));
95   row.set_title(UTF8ToUTF16("Google"));
96   row.set_created(Time::Now());
97
98   ASSERT_TRUE(urls_sql_handler_.Insert(&row));
99   ASSERT_TRUE(visit_sql_handler_.Insert(&row));
100
101   URLRow url_row;
102   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
103
104   VisitVector visits;
105   ASSERT_TRUE(history_db_.GetVisitsForURL(row.url_id(), &visits));
106   EXPECT_EQ(1u, visits.size());
107   EXPECT_EQ(row.created(), visits[0].visit_time);
108 }
109
110 // Insert a URL with visit count as 1 to verify a visit was inserted.
111 TEST_F(VisitSQLHandlerTest, InsertURLWithVisitCount) {
112   HistoryAndBookmarkRow row;
113   row.set_raw_url("http://google.com");
114   row.set_url(GURL("http://google.com"));
115   row.set_visit_count(1);
116
117   ASSERT_TRUE(urls_sql_handler_.Insert(&row));
118   ASSERT_TRUE(visit_sql_handler_.Insert(&row));
119
120   URLRow url_row;
121   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
122
123   VisitVector visits;
124   ASSERT_TRUE(history_db_.GetVisitsForURL(row.url_id(), &visits));
125   EXPECT_EQ(1u, visits.size());
126   EXPECT_NE(Time(), visits[0].visit_time);
127 }
128
129 // Insert a URL with all values set to verify the visit rows
130 // were inserted correctly.
131 TEST_F(VisitSQLHandlerTest, Insert) {
132   HistoryAndBookmarkRow row;
133   row.set_raw_url("http://google.com");
134   row.set_url(GURL("http://google.com"));
135   row.set_visit_count(10);
136   row.set_last_visit_time(Time::Now());
137   row.set_created(Time::Now() - TimeDelta::FromDays(1));
138
139   ASSERT_TRUE(urls_sql_handler_.Insert(&row));
140   ASSERT_TRUE(visit_sql_handler_.Insert(&row));
141
142   URLRow url_row;
143   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
144
145   VisitVector visits;
146   ASSERT_TRUE(history_db_.GetVisitsForURL(row.url_id(), &visits));
147   // 10 row were inserted.
148   EXPECT_EQ(10u, visits.size());
149   // The earlies one has created time set.
150   EXPECT_EQ(row.created(), visits[0].visit_time);
151   // The latest one has last visit time set.
152   EXPECT_EQ(row.last_visit_time(), visits[9].visit_time);
153 }
154
155 // Test the case that both visit time and visit count updated.
156 TEST_F(VisitSQLHandlerTest, UpdateVisitTimeAndVisitCount) {
157   HistoryAndBookmarkRow row;
158   row.set_raw_url("http://google.com");
159   row.set_url(GURL("http://google.com"));
160   row.set_title(UTF8ToUTF16("Google"));
161   row.set_visit_count(10);
162   row.set_last_visit_time(Time::Now() - TimeDelta::FromDays(10));
163
164   ASSERT_TRUE(urls_sql_handler_.Insert(&row));
165   ASSERT_TRUE(visit_sql_handler_.Insert(&row));
166
167   URLRow url_row;
168   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
169
170   HistoryAndBookmarkRow update_row;
171   update_row.set_last_visit_time(Time::Now());
172   update_row.set_visit_count(1);
173
174   TableIDRow id;
175   id.url_id = url_row.id();
176   TableIDRows ids;
177   ids.push_back(id);
178   ASSERT_TRUE(urls_sql_handler_.Update(update_row, ids));
179   ASSERT_TRUE(visit_sql_handler_.Update(update_row, ids));
180
181   VisitVector visits;
182   ASSERT_TRUE(history_db_.GetVisitsForURL(row.url_id(), &visits));
183   EXPECT_EQ(1u, visits.size());
184   EXPECT_EQ(update_row.last_visit_time(), visits[0].visit_time);
185 }
186
187 // Update visit count to zero to verify the visit rows of this url
188 // were removed.
189 TEST_F(VisitSQLHandlerTest, UpdateVisitCountZero) {
190   HistoryAndBookmarkRow row;
191   row.set_raw_url("http://google.com");
192   row.set_url(GURL("http://google.com"));
193   row.set_visit_count(10);
194   row.set_last_visit_time(Time::Now() - TimeDelta::FromDays(10));
195
196   ASSERT_TRUE(urls_sql_handler_.Insert(&row));
197   ASSERT_TRUE(visit_sql_handler_.Insert(&row));
198
199   URLRow url_row;
200   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
201
202   HistoryAndBookmarkRow update_row;
203   update_row.set_visit_count(0);
204   TableIDRow id;
205   id.url_id = url_row.id();
206   TableIDRows ids;
207   ids.push_back(id);
208   ASSERT_TRUE(urls_sql_handler_.Update(update_row, ids));
209   ASSERT_TRUE(visit_sql_handler_.Update(update_row, ids));
210
211   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
212   EXPECT_EQ(0, url_row.visit_count());
213   // Last visit is reset.
214   EXPECT_EQ(Time(), url_row.last_visit());
215   VisitVector visits;
216   ASSERT_TRUE(history_db_.GetVisitsForURL(row.url_id(), &visits));
217   EXPECT_EQ(0u, visits.size());
218 }
219
220 // Update both last visit time and created time to verify
221 // that visits row are updated correctly.
222 TEST_F(VisitSQLHandlerTest, UpdateBothTime) {
223   HistoryAndBookmarkRow row;
224   row.set_raw_url("http://google.com");
225   row.set_url(GURL("http://google.com"));
226   row.set_visit_count(10);
227   row.set_last_visit_time(Time::Now() - TimeDelta::FromDays(10));
228
229   ASSERT_TRUE(urls_sql_handler_.Insert(&row));
230   ASSERT_TRUE(visit_sql_handler_.Insert(&row));
231   URLRow url_row;
232   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
233
234   HistoryAndBookmarkRow update_row;
235   update_row.set_last_visit_time(Time::Now() - TimeDelta::FromDays(9));
236   update_row.set_created(Time::Now() - TimeDelta::FromDays(10));
237   TableIDRow id;
238   id.url_id = url_row.id();
239   TableIDRows ids;
240   ids.push_back(id);
241   ASSERT_TRUE(urls_sql_handler_.Update(update_row, ids));
242   ASSERT_TRUE(visit_sql_handler_.Update(update_row, ids));
243
244   VisitVector visits;
245   ASSERT_TRUE(history_db_.GetVisitsForURL(row.url_id(), &visits));
246   // Though both time are updated, visit count was increase by 1 because of
247   // last visit time's change.
248   EXPECT_EQ(11u, visits.size());
249   EXPECT_EQ(update_row.created(), visits[0].visit_time);
250   EXPECT_EQ(update_row.last_visit_time(), visits[10].visit_time);
251 }
252
253 // Update the visit count to verify the new visits are inserted.
254 TEST_F(VisitSQLHandlerTest, UpdateVisitCountIncreased) {
255   HistoryAndBookmarkRow row;
256   row.set_raw_url("http://google.com");
257   row.set_url(GURL("http://google.com"));
258   row.set_visit_count(10);
259   row.set_last_visit_time(Time::Now() - TimeDelta::FromDays(10));
260
261   ASSERT_TRUE(urls_sql_handler_.Insert(&row));
262   URLRow url_row;
263   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
264   EXPECT_EQ(row.url(), url_row.url());
265   EXPECT_EQ(10, url_row.visit_count());
266   EXPECT_EQ(row.last_visit_time(), url_row.last_visit());
267
268   HistoryAndBookmarkRow update_row;
269   update_row.set_visit_count(11);
270   TableIDRow id;
271   id.url_id = url_row.id();
272   TableIDRows ids;
273   ids.push_back(id);
274   ASSERT_TRUE(urls_sql_handler_.Update(update_row, ids));
275   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
276   EXPECT_EQ(row.url(), url_row.url());
277   EXPECT_EQ(11, url_row.visit_count());
278   EXPECT_LT(row.last_visit_time(), url_row.last_visit());
279 }
280
281 TEST_F(VisitSQLHandlerTest, Delete) {
282   HistoryAndBookmarkRow row;
283   row.set_raw_url("http://google.com");
284   row.set_url(GURL("http://google.com"));
285   row.set_visit_count(10);
286   row.set_last_visit_time(Time::Now() - TimeDelta::FromDays(10));
287
288   ASSERT_TRUE(urls_sql_handler_.Insert(&row));
289   URLRow url_row;
290   ASSERT_TRUE(history_db_.GetURLRow(row.url_id(), &url_row));
291   EXPECT_EQ(row.url(), url_row.url());
292   EXPECT_EQ(10, url_row.visit_count());
293   EXPECT_EQ(row.last_visit_time(), url_row.last_visit());
294
295   TableIDRow id;
296   id.url_id = url_row.id();
297   TableIDRows ids;
298   ids.push_back(id);
299   ASSERT_TRUE(urls_sql_handler_.Delete(ids));
300   EXPECT_FALSE(history_db_.GetURLRow(row.url_id(), &url_row));
301 }
302
303 }  // namespace history