// Copyright 2019 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 "printing/print_settings_conversion.h"

#include "base/json/json_reader.h"
#include "base/values.h"
#include "printing/print_settings.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace printing {

namespace {

const char kPrinterSettings[] = R"({
  "headerFooterEnabled": true,
  "title": "Test Doc",
  "url": "http://localhost/",
  "shouldPrintBackgrounds": false,
  "shouldPrintSelectionOnly": false,
  "mediaSize": {
    "height_microns": 297000,
    "width_microns": 210000
  },
  "marginsType": 0,
  "pageRange": [{
    "from": 1,
    "to": 1
  }],
  "collate": false,
  "copies": 1,
  "color": 2,
  "duplex": 0,
  "landscape": false,
  "deviceName": "printer",
  "scaleFactor": 100,
  "rasterizePDF": false,
  "pagesPerSheet": 1,
  "dpiHorizontal": 300,
  "dpiVertical": 300,
  "previewModifiable": true,
  "sendUserInfo": true,
  "username": "username@domain.net",
  "jobTitle": "test.pdf",
  "pinValue": "0000"
})";

}  // namespace

TEST(PrintSettingsConversionTest, ConversionTest) {
  std::unique_ptr<base::Value> value =
      base::JSONReader::ReadDeprecated(kPrinterSettings);
  ASSERT_TRUE(value);
  PrintSettings settings;
  bool success = PrintSettingsFromJobSettings(
      base::Value::FromUniquePtrValue(std::move(value)), &settings);
  ASSERT_TRUE(success);
#if defined(OS_CHROMEOS)
  EXPECT_TRUE(settings.send_user_info());
  EXPECT_EQ("username@domain.net", settings.username());
  EXPECT_EQ("test.pdf", settings.job_title());
  EXPECT_EQ("0000", settings.pin_value());
#endif
}

#if defined(OS_CHROMEOS)
TEST(PrintSettingsConversionTest, ConversionTest_DontSendUsername) {
  std::unique_ptr<base::Value> value =
      base::JSONReader::ReadDeprecated(kPrinterSettings);
  ASSERT_TRUE(value);
  value->SetKey(kSettingSendUserInfo, base::Value(false));
  PrintSettings settings;
  bool success = PrintSettingsFromJobSettings(
      base::Value::FromUniquePtrValue(std::move(value)), &settings);
  ASSERT_TRUE(success);
  EXPECT_FALSE(settings.send_user_info());
  EXPECT_EQ("", settings.username());
  EXPECT_EQ("", settings.job_title());
}
#endif

}  // namespace printing
