1// Copyright 2014 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 "base/bind.h"
6#include "base/memory/scoped_ptr.h"
7#include "chrome/browser/supervised_user/supervised_user_shared_settings_service.h"
8#include "chrome/browser/supervised_user/supervised_user_shared_settings_update.h"
9#include "chrome/test/base/testing_profile.h"
10#include "sync/api/sync_change.h"
11#include "testing/gtest/include/gtest/gtest.h"
12
13class SupervisedUserSharedSettingsUpdateTest : public testing::Test {
14 public:
15  SupervisedUserSharedSettingsUpdateTest() : service_(profile_.GetPrefs()) {}
16  virtual ~SupervisedUserSharedSettingsUpdateTest() {}
17
18  void OnSettingUpdated(bool success) {
19    result_.reset(new bool(success));
20  }
21
22 protected:
23  TestingProfile profile_;
24  SupervisedUserSharedSettingsService service_;
25  scoped_ptr<bool> result_;
26};
27
28TEST_F(SupervisedUserSharedSettingsUpdateTest, Success) {
29  SupervisedUserSharedSettingsUpdate update(
30      &service_,
31      "abcdef",
32      "name",
33      scoped_ptr<base::Value>(new base::StringValue("Hans Moleman")),
34      base::Bind(&SupervisedUserSharedSettingsUpdateTest::OnSettingUpdated,
35                 base::Unretained(this)));
36  syncer::SyncChangeList changes;
37  changes.push_back(syncer::SyncChange(
38      FROM_HERE,
39      syncer::SyncChange::ACTION_UPDATE,
40      SupervisedUserSharedSettingsService::CreateSyncDataForSetting(
41          "abcdef", "name", base::StringValue("Hans Moleman"), true)));
42  syncer::SyncError error = service_.ProcessSyncChanges(FROM_HERE, changes);
43  EXPECT_FALSE(error.IsSet()) << error.ToString();
44  ASSERT_TRUE(result_);
45  EXPECT_TRUE(*result_);
46}
47
48TEST_F(SupervisedUserSharedSettingsUpdateTest, Failure) {
49  SupervisedUserSharedSettingsUpdate update(
50      &service_,
51      "abcdef",
52      "name",
53      scoped_ptr<base::Value>(new base::StringValue("Hans Moleman")),
54      base::Bind(&SupervisedUserSharedSettingsUpdateTest::OnSettingUpdated,
55                 base::Unretained(this)));
56
57  // Syncing down a different change will cause the update to fail.
58  syncer::SyncChangeList changes;
59  changes.push_back(syncer::SyncChange(
60      FROM_HERE,
61      syncer::SyncChange::ACTION_UPDATE,
62      SupervisedUserSharedSettingsService::CreateSyncDataForSetting(
63          "abcdef",
64          "name",
65          base::StringValue("Barney Gumble"),
66          true)));
67  syncer::SyncError error = service_.ProcessSyncChanges(FROM_HERE, changes);
68  EXPECT_FALSE(error.IsSet()) << error.ToString();
69  ASSERT_TRUE(result_);
70  EXPECT_FALSE(*result_);
71}
72
73TEST_F(SupervisedUserSharedSettingsUpdateTest, Cancel) {
74  {
75    SupervisedUserSharedSettingsUpdate update(
76        &service_,
77        "abcdef",
78        "name",
79        scoped_ptr<base::Value>(new base::StringValue("Hans Moleman")),
80        base::Bind(&SupervisedUserSharedSettingsUpdateTest::OnSettingUpdated,
81                   base::Unretained(this)));
82    ASSERT_FALSE(result_);
83  }
84  ASSERT_FALSE(result_);
85}
86