// Copyright 2017 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/payments/content/web_app_manifest_section_table.h"

#include <stdint.h>
#include <memory>

#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h"
#include "components/webdata/common/web_database.h"
#include "sql/init_status.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace payments {
namespace {

class WebAppManifestSectionTableTest : public testing::Test {
 public:
  WebAppManifestSectionTableTest() {}
  ~WebAppManifestSectionTableTest() override {}

 protected:
  void SetUp() override {
    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
    file_ = temp_dir_.GetPath().AppendASCII("TestWebDatabase");

    table_ = std::make_unique<WebAppManifestSectionTable>();
    db_ = std::make_unique<WebDatabase>();
    db_->AddTable(table_.get());
    ASSERT_EQ(sql::INIT_OK, db_->Init(file_));
  }

  void TearDown() override {}

  std::vector<uint8_t> GenerateFingerprint(uint8_t seed) {
    std::vector<uint8_t> fingerprint;
    // Note that the fingerprint is calculated with SHA-256, so the length is
    // 32.
    for (size_t i = 0; i < 32U; i++) {
      fingerprint.push_back((seed + i) % 256U);
    }
    return fingerprint;
  }

  base::FilePath file_;
  base::ScopedTempDir temp_dir_;
  std::unique_ptr<WebAppManifestSectionTable> table_;
  std::unique_ptr<WebDatabase> db_;

 private:
  DISALLOW_COPY_AND_ASSIGN(WebAppManifestSectionTableTest);
};

TEST_F(WebAppManifestSectionTableTest, GetNonExistManifest) {
  WebAppManifestSectionTable* web_app_manifest_section_table =
      WebAppManifestSectionTable::FromWebDatabase(db_.get());
  std::vector<WebAppManifestSection> retrieved_manifest =
      web_app_manifest_section_table->GetWebAppManifest("https://bobpay.com");
  ASSERT_TRUE(retrieved_manifest.empty());
}

TEST_F(WebAppManifestSectionTableTest, AddAndGetManifest) {
  std::vector<uint8_t> fingerprint_one = GenerateFingerprint(1);
  std::vector<uint8_t> fingerprint_two = GenerateFingerprint(32);

  // create a bobpay web app manifest.
  std::vector<WebAppManifestSection> manifest;
  WebAppManifestSection section;
  section.id = "com.bobpay";
  section.min_version = static_cast<int64_t>(1);
  section.fingerprints.push_back(fingerprint_one);
  section.fingerprints.push_back(fingerprint_two);
  manifest.emplace_back(std::move(section));

  // Adds the manifest to the table.
  WebAppManifestSectionTable* web_app_manifest_section_table =
      WebAppManifestSectionTable::FromWebDatabase(db_.get());
  ASSERT_TRUE(web_app_manifest_section_table->AddWebAppManifest(manifest));

  // Gets and verifys the manifest.
  std::vector<WebAppManifestSection> retrieved_manifest =
      web_app_manifest_section_table->GetWebAppManifest("com.bobpay");
  ASSERT_EQ(retrieved_manifest.size(), 1U);
  ASSERT_EQ(retrieved_manifest[0].id, "com.bobpay");
  ASSERT_EQ(retrieved_manifest[0].min_version, 1);
  ASSERT_EQ(retrieved_manifest[0].fingerprints.size(), 2U);

  // Verify the two fingerprints.
  ASSERT_TRUE(retrieved_manifest[0].fingerprints[0] == fingerprint_one);
  ASSERT_TRUE(retrieved_manifest[0].fingerprints[1] == fingerprint_two);
}

TEST_F(WebAppManifestSectionTableTest, AddAndGetMultipleManifests) {
  std::vector<uint8_t> fingerprint_one = GenerateFingerprint(1);
  std::vector<uint8_t> fingerprint_two = GenerateFingerprint(32);
  std::vector<uint8_t> fingerprint_three = GenerateFingerprint(2);
  std::vector<uint8_t> fingerprint_four = GenerateFingerprint(30);

  WebAppManifestSectionTable* web_app_manifest_section_table =
      WebAppManifestSectionTable::FromWebDatabase(db_.get());

  // Adds bobpay manifest to the table.
  std::vector<WebAppManifestSection> manifest_1;
  WebAppManifestSection manifest_1_section;
  manifest_1_section.id = "com.bobpay";
  manifest_1_section.min_version = static_cast<int64_t>(1);
  // Adds two finger prints.
  manifest_1_section.fingerprints.push_back(fingerprint_one);
  manifest_1_section.fingerprints.push_back(fingerprint_two);
  manifest_1.emplace_back(std::move(manifest_1_section));
  ASSERT_TRUE(web_app_manifest_section_table->AddWebAppManifest(manifest_1));

  // Adds alicepay manifest to the table.
  std::vector<WebAppManifestSection> manifest_2;
  WebAppManifestSection manifest_2_section;
  manifest_2_section.id = "com.alicepay";
  manifest_2_section.min_version = static_cast<int64_t>(2);
  // Adds two finger prints.
  manifest_2_section.fingerprints.push_back(fingerprint_three);
  manifest_2_section.fingerprints.push_back(fingerprint_four);
  manifest_2.emplace_back(std::move(manifest_2_section));
  ASSERT_TRUE(web_app_manifest_section_table->AddWebAppManifest(manifest_2));

  // Verifys bobpay manifest.
  std::vector<WebAppManifestSection> bobpay_manifest =
      web_app_manifest_section_table->GetWebAppManifest("com.bobpay");
  ASSERT_EQ(bobpay_manifest.size(), 1U);
  ASSERT_EQ(bobpay_manifest[0].id, "com.bobpay");
  ASSERT_EQ(bobpay_manifest[0].min_version, 1);
  ASSERT_EQ(bobpay_manifest[0].fingerprints.size(), 2U);
  ASSERT_TRUE(bobpay_manifest[0].fingerprints[0] == fingerprint_one);
  ASSERT_TRUE(bobpay_manifest[0].fingerprints[1] == fingerprint_two);

  // Verifys alicepay manifest.
  std::vector<WebAppManifestSection> alicepay_manifest =
      web_app_manifest_section_table->GetWebAppManifest("com.alicepay");
  ASSERT_EQ(alicepay_manifest.size(), 1U);
  ASSERT_EQ(alicepay_manifest[0].id, "com.alicepay");
  ASSERT_EQ(alicepay_manifest[0].min_version, 2);
  ASSERT_EQ(alicepay_manifest[0].fingerprints.size(), 2U);
  ASSERT_TRUE(alicepay_manifest[0].fingerprints[0] == fingerprint_three);
  ASSERT_TRUE(alicepay_manifest[0].fingerprints[1] == fingerprint_four);
}

// A single manifest can have multiple package names, e.g., one for developer
// and one for production version of the app. A package name is unique among all
// the apps on Android, so this means we can define multiple apps in a single
// manifest.
TEST_F(WebAppManifestSectionTableTest, AddAndGetSingleManifestWithTwoIds) {
  std::vector<uint8_t> fingerprint_dev = GenerateFingerprint(1);
  std::vector<uint8_t> fingerprint_prod = GenerateFingerprint(32);

  WebAppManifestSectionTable* web_app_manifest_section_table =
      WebAppManifestSectionTable::FromWebDatabase(db_.get());

  std::vector<WebAppManifestSection> manifest;
  {
    // Adds dev version to the manifest.
    WebAppManifestSection manifest_dev_section;
    manifest_dev_section.id = "com.bobpay.dev";
    manifest_dev_section.min_version = static_cast<int64_t>(2);
    manifest_dev_section.fingerprints.push_back(fingerprint_dev);
    manifest.emplace_back(std::move(manifest_dev_section));
  }
  {
    // Adds prod version to the manifest.
    WebAppManifestSection manifest_prod_section;
    manifest_prod_section.id = "com.bobpay.prod";
    manifest_prod_section.min_version = static_cast<int64_t>(1);
    manifest_prod_section.fingerprints.push_back(fingerprint_prod);
    manifest.emplace_back(std::move(manifest_prod_section));
  }
  ASSERT_TRUE(web_app_manifest_section_table->AddWebAppManifest(manifest));

  {
    // Verify the dev manifest.
    std::vector<WebAppManifestSection> actual_manifest =
        web_app_manifest_section_table->GetWebAppManifest("com.bobpay.dev");
    ASSERT_EQ(actual_manifest.size(), 1U);
    EXPECT_EQ(actual_manifest[0].id, "com.bobpay.dev");
    EXPECT_EQ(actual_manifest[0].min_version, 2);
    ASSERT_EQ(actual_manifest[0].fingerprints.size(), 1U);
    EXPECT_TRUE(actual_manifest[0].fingerprints[0] == fingerprint_dev);
  }

  {
    // Verify the prod manifest.
    std::vector<WebAppManifestSection> actual_manifest =
        web_app_manifest_section_table->GetWebAppManifest("com.bobpay.prod");
    ASSERT_EQ(actual_manifest.size(), 1U);
    EXPECT_EQ(actual_manifest[0].id, "com.bobpay.prod");
    EXPECT_EQ(actual_manifest[0].min_version, 1);
    ASSERT_EQ(actual_manifest[0].fingerprints.size(), 1U);
    EXPECT_TRUE(actual_manifest[0].fingerprints[0] == fingerprint_prod);
  }
}

}  // namespace

}  // namespace payments
