// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/update_client/update_query_params.h"
#include "base/strings/stringprintf.h"
#include "components/update_client/update_query_params_delegate.h"
#include "components/version_info/version_info.h"
#include "testing/gtest/include/gtest/gtest.h"

using base::StringPrintf;

namespace update_client {

namespace {

bool Contains(const std::string& source, const std::string& target) {
  return source.find(target) != std::string::npos;
}

class TestUpdateQueryParamsDelegate : public UpdateQueryParamsDelegate {
  std::string GetExtraParams() override { return "&cat=dog"; }
};

}  // namespace

void TestParams(UpdateQueryParams::ProdId prod_id, bool extra_params) {
  std::string params = UpdateQueryParams::Get(prod_id);

  // This doesn't so much test what the values are (since that would be an
  // almost exact duplication of code with update_query_params.cc, and wouldn't
  // really test anything) as it is a verification that all the params are
  // present in the generated string.
  EXPECT_TRUE(
      Contains(params, StringPrintf("os=%s", UpdateQueryParams::GetOS())));
  EXPECT_TRUE(
      Contains(params, StringPrintf("arch=%s", UpdateQueryParams::GetArch())));
  EXPECT_TRUE(Contains(
      params,
      StringPrintf("prod=%s", UpdateQueryParams::GetProdIdString(prod_id))));
  if (extra_params)
    EXPECT_TRUE(Contains(params, "cat=dog"));
}

void TestProdVersion() {
  EXPECT_EQ(version_info::GetVersionNumber(),
            UpdateQueryParams::GetProdVersion());
}

TEST(UpdateQueryParamsTest, GetParams) {
  TestProdVersion();

  TestParams(UpdateQueryParams::CRX, false);
  TestParams(UpdateQueryParams::CHROME, false);

  TestUpdateQueryParamsDelegate delegate;
  UpdateQueryParams::SetDelegate(&delegate);

  TestParams(UpdateQueryParams::CRX, true);
  TestParams(UpdateQueryParams::CHROME, true);
}

}  // namespace update_client
