1// Copyright 2019 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#import "ios/chrome/browser/search_engines/extension_search_engine_data_updater.h"
6
7#include "base/macros.h"
8#include "base/strings/sys_string_conversions.h"
9#include "components/search_engines/template_url.h"
10#include "components/search_engines/template_url_data.h"
11#include "components/search_engines/template_url_service.h"
12#include "ios/chrome/common/app_group/app_group_constants.h"
13#include "testing/gtest/include/gtest/gtest.h"
14#include "testing/platform_test.h"
15
16#if !defined(__has_feature) || !__has_feature(objc_arc)
17#error "This file requires ARC support."
18#endif
19
20// Test fixture for ExtensionSearchEngineDataUpdater class.
21class ExtensionSearchEngineDataUpdaterTest : public PlatformTest {
22 protected:
23  ExtensionSearchEngineDataUpdaterTest()
24      : search_by_image_key_(base::SysUTF8ToNSString(
25            app_group::kChromeAppGroupSupportsSearchByImage)) {}
26
27  void SetUp() override {
28    PlatformTest::SetUp();
29
30    template_url_service_.reset(new TemplateURLService(nullptr, 0));
31    template_url_service_->Load();
32    observer_.reset(
33        new ExtensionSearchEngineDataUpdater(template_url_service_.get()));
34
35    NSUserDefaults* shared_defaults = app_group::GetGroupUserDefaults();
36    [shared_defaults setBool:NO forKey:search_by_image_key_];
37  }
38
39  bool StoredSupportsSearchByImage() {
40    NSUserDefaults* shared_defaults = app_group::GetGroupUserDefaults();
41    return [shared_defaults boolForKey:search_by_image_key_];
42  }
43
44  std::unique_ptr<TemplateURLService> template_url_service_;
45
46 private:
47  std::unique_ptr<ExtensionSearchEngineDataUpdater> observer_;
48  NSString* search_by_image_key_;
49};
50
51TEST_F(ExtensionSearchEngineDataUpdaterTest, AddSupportedSearchEngine) {
52  ASSERT_FALSE(StoredSupportsSearchByImage());
53
54  const char kImageSearchURL[] = "http://foo.com/sbi";
55  const char kPostParamsString[] = "image_content={google:imageThumbnail}";
56
57  TemplateURLData supported_template_url_data{};
58  supported_template_url_data.image_url = kImageSearchURL;
59  supported_template_url_data.image_url_post_params = kPostParamsString;
60  TemplateURL supported_template_url(supported_template_url_data);
61
62  template_url_service_->SetUserSelectedDefaultSearchProvider(
63      &supported_template_url);
64
65  ASSERT_TRUE(StoredSupportsSearchByImage());
66}
67
68TEST_F(ExtensionSearchEngineDataUpdaterTest, AddUnsupportedSearchEngine) {
69  ASSERT_FALSE(StoredSupportsSearchByImage());
70
71  TemplateURLData unsupported_template_url_data{};
72  TemplateURL unsupported_template_url(unsupported_template_url_data);
73
74  template_url_service_->SetUserSelectedDefaultSearchProvider(
75      &unsupported_template_url);
76
77  ASSERT_FALSE(StoredSupportsSearchByImage());
78}
79