// 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"
})";

}

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());
#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());
}
#endif

}  // namespace printing
