1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/engine/cleanup_disabled_types_command.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/engine/syncer_end_command.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/sessions/sync_session.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/sync/engine/syncer_command_test.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gmock/include/gmock/gmock.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::_;
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_sync {
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CleanupDisabledTypesCommandTest : public MockDirectorySyncerCommandTest {
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CleanupDisabledTypesCommandTest() {
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (int i = syncable::FIRST_REAL_MODEL_TYPE;
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch         i < syncable::MODEL_TYPE_COUNT; i++) {
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      all_types_.insert(syncable::ModelTypeFromInt(i));
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetUp() {
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    mutable_routing_info()->clear();
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (*mutable_routing_info())[syncable::BOOKMARKS] = GROUP_PASSIVE;
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MockDirectorySyncerCommandTest::SetUp();
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Overridden to allow SyncerEndCommand Execute to work.
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool IsSyncingCurrentlySilenced() {
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return false;
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const syncable::ModelTypeSet& all_types() { return all_types_; }
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  syncable::ModelTypeSet all_types_;
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(tim): Add syncer test to verify previous routing info is set.
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CleanupDisabledTypesCommandTest, NoPreviousRoutingInfo) {
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CleanupDisabledTypesCommand command;
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  syncable::ModelTypeSet expected(all_types());
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  expected.erase(syncable::BOOKMARKS);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_CALL(*mock_directory(), PurgeEntriesWithTypeIn(expected));
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  command.ExecuteImpl(session());
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CleanupDisabledTypesCommandTest, NoPurge) {
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CleanupDisabledTypesCommand command;
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_CALL(*mock_directory(), PurgeEntriesWithTypeIn(_)).Times(0);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ModelSafeRoutingInfo prev(routing_info());
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  session()->context()->set_previous_session_routing_info(prev);
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (*mutable_routing_info())[syncable::AUTOFILL] = GROUP_PASSIVE;
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  command.ExecuteImpl(session());
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  prev = routing_info();
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  command.ExecuteImpl(session());
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CleanupDisabledTypesCommandTest, TypeDisabled) {
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CleanupDisabledTypesCommand command;
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  syncable::ModelTypeSet expected;
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  expected.insert(syncable::PASSWORDS);
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  expected.insert(syncable::PREFERENCES);
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (*mutable_routing_info())[syncable::AUTOFILL] = GROUP_PASSIVE;
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (*mutable_routing_info())[syncable::THEMES] = GROUP_PASSIVE;
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (*mutable_routing_info())[syncable::EXTENSIONS] = GROUP_PASSIVE;
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ModelSafeRoutingInfo prev(routing_info());
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  prev[syncable::PASSWORDS] = GROUP_PASSIVE;
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  prev[syncable::PREFERENCES] = GROUP_PASSIVE;
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  session()->context()->set_previous_session_routing_info(prev);
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_CALL(*mock_directory(), PurgeEntriesWithTypeIn(expected));
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  command.ExecuteImpl(session());
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace browser_sync
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
87