"use strict";

const VALID_TESTS = [
  { region: "US" },
  ["1234", false], // too short
  ["12345", true],
  ["123456", false], // too long
  ["1234A", false], // contain non-digit character
  ["12345-123", false],
  ["12345-1234", true],
  ["12345-12345", false],
  ["12345-1234A", false],
  ["12345 1234", true], // Do we want to allow this?
  ["12345_1234", false], // Do we want to allow this?

  { region: "CA" },
  ["M5T 1R5", true],
  ["M5T1R5", true], // no space between the first and second parts is allowed
  ["S4S 6X3", true],
  ["M5T", false], // Only the first part
  ["1R5", false], // Only the second part
  ["D1B 1A1", false], // invalid first character, D
  ["M5T 1R5A", false], // extra character at the end
  ["M5T 1R5-", false], // extra character at the end
  ["M5T-1R5", false], // hyphen in the wrong place
  ["MT5 1R5", false], // missing letter in the first part
  ["M5T 1R", false], // missing letter in the second part
  ["M5T 1R55", false], // extra digit at the end
  ["M5T 1R", false], // missing digit in the second part
  ["M5T 1R5Q", false], // invalid second-to-last letter, Q
];

const COMPARE_TESTS = [
  { region: "US" },
  ["12345", "12345", SAME],
  ["M5T 1R5", "m5t 1r5", SAME],
  ["12345-1234", "12345 1234", SAME],
  ["12345-1234", "12345", A_CONTAINS_B],
  ["12345-1234", "12345#1234", SAME], // B is invalid
  ["12345-1234", "1234", A_CONTAINS_B], // B is invalid
];

const TEST_FIELD_NAME = "PostalCode";

add_setup(async () => {});

add_task(async function test_isValid() {
  runIsValidTest(VALID_TESTS, TEST_FIELD_NAME, value => {
    return { "postal-code": value };
  });
});

add_task(async function test_compare() {
  runCompareTest(COMPARE_TESTS, TEST_FIELD_NAME, value => {
    return { "postal-code": value };
  });
});
