15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/top_sites_database.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TopSitesDatabaseTest : public testing::Test {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Get a temporary directory for the test DB files.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file_name_ = temp_dir_.path().AppendASCII("TestTopSites.db");
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ScopedTempDir temp_dir_;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath file_name_;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(TopSitesDatabaseTest, UpgradeToVersion2) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TopSitesDatabase db;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(db.Init(file_name_));
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create a version 1 table. SQLite doesn't support DROP COLUMN with
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ALTER TABLE. Hence, we recreate a table here.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(db.db_->Execute("DROP TABLE IF EXISTS thumbnails"));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(db.db_->Execute("CREATE TABLE thumbnails ("
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              "url LONGVARCHAR PRIMARY KEY,"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              "url_rank INTEGER ,"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              "title LONGVARCHAR,"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              "thumbnail BLOB,"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              "redirects LONGVARCHAR,"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              "boring_score DOUBLE DEFAULT 1.0, "
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              "good_clipping INTEGER DEFAULT 0, "
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              "at_top INTEGER DEFAULT 0, "
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              "last_updated INTEGER DEFAULT 0)"));
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db.meta_table_.SetVersionNumber(1);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure the table meets the version 1 criteria.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(1, db.meta_table_.GetVersionNumber());
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(db.db_->DoesColumnExist("thumbnails", "load_completed"));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Upgrade to version 2.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(db.UpgradeToVersion2());
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure the table meets the version 2 criteria.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(2, db.meta_table_.GetVersionNumber());
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(db.db_->DoesColumnExist("thumbnails", "load_completed"));
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace history
56