diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index b6222f3b5..9377af066 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -75,7 +75,6 @@ stages:
steps:
- checkout: self
clean: true
- - bash: cp applepay/apple-developer-merchantid-domain-association-nonprod.txt apple-developer-merchantid-domain-association.txt
- template: templates/digital/step-build-vue.yml@AzureDevOps
parameters:
buildOutputDir: dist
@@ -135,7 +134,6 @@ stages:
steps:
- checkout: self
clean: true
- - bash: cp public/applepay/apple-developer-merchantid-domain-association-nonprod.txt public/apple-developer-merchantid-domain-association.txt
- template: templates/digital/step-build-vue.yml@AzureDevOps
parameters:
buildOutputDir: dist
@@ -195,7 +193,6 @@ stages:
steps:
- checkout: self
clean: true
- - bash: cp public/applepay/apple-developer-merchantid-domain-association-nonprod.txt public/apple-developer-merchantid-domain-association.txt
- template: templates/digital/step-build-vue.yml@AzureDevOps
parameters:
buildOutputDir: dist
@@ -255,7 +252,6 @@ stages:
steps:
- checkout: self
clean: true
- - bash: cp public/applepay/apple-developer-merchantid-domain-association-prod.txt public/apple-developer-merchantid-domain-association.txt
- template: templates/digital/step-build-vue.yml@AzureDevOps
parameters:
buildOutputDir: dist
diff --git a/jest.config.js b/jest.config.js
index 3e5462315..e364ec3ee 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -32,7 +32,7 @@ module.exports = {
testMatch: ["**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"],
coverageThreshold: {
global: {
- statements: 77,
+ statements: 76,
},
},
// Uncomment this to avoid the massive amount of warnings we are getting for onSubmit and onInvalidSubmit
diff --git a/public/applepay/apple-developer-merchantid-domain-association-nonprod.txt b/public/applepay/apple-developer-merchantid-domain-association-nonprod.txt
deleted file mode 100644
index f358f5b28..000000000
--- a/public/applepay/apple-developer-merchantid-domain-association-nonprod.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-MIIQaQYJKoZIhvcNAQcCoIIQWjCCEFYCAQExCzAJBgUrDgMCGgUAMHgGCSqGSIb3DQEHAaBrBGl7
-InRlYW1JZCI6IlY4SFNZMzlOWjUiLCJkb21haW4iOiJ3d3ctdGVzdDIuc2FmZWxpdGUuY29tIiwi
-ZGF0ZUNyZWF0ZWQiOiIyMDI0LTA3LTE4LDE0OjU1OjA1IiwidmVyc2lvbiI6MX2ggg0_MIIENDCC
-AxygAwIBAgIIY_BW8s8iV_MwDQYJKoZIhvcNAQELBQAwczEtMCsGA1UEAwwkQXBwbGUgaVBob25l
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwHhcNMjQwMTMwMTgzMjA1WhcNMjkw
-MTI4MTgzMjA0WjBZMTUwMwYDVQQDDCxBcHBsZSBpUGhvbmUgT1MgUHJvdmlzaW9uaW5nIFByb2Zp
-bGUgU2lnbmluZzETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQC1FX_kJQ1chXPiyq7cbeqNGGn-pv_c_cwpLk2qcBWJD79H31jO
-WFlKCB2xoQ229iBxUncHfWR_QmmLKHvyw0A9s3CBF8nkhi2ZVzd1wNTjtjcc2Dcm7kAsi3Hw7xRj
-TOS_0S-HUEUdpxJxkbQX9sNJQHBt64923LXzwWH5JKwxWb5X_kqWxYoAlse5CjmYUeqATgKGEejt
-eO1HxmV6-LAL1Ycpfmab7T296Dm6fUhkO-eIB1-efCGWkBQAV0BlJq7bo4O8jRv3o4VjOjf0rtDO
-FG8RVCdSsGjLtGs-0gDEORTorEdwUlY2X54rPlOZpuOA0lN4N7tz35kMtxySmq9lAgMBAAGjgeUw
-geIwDAYDVR0TAQH_BAIwADAfBgNVHSMEGDAWgBRv8ZUYYlzgyPHF7WwYyeDTZFKYIDBABggrBgEF
-BQcBAQQ0MDIwMAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3NwMDMtYWlwY2Ew
-NzAvBgNVHR8EKDAmMCSgIqAghh5odHRwOi8vY3JsLmFwcGxlLmNvbS9haXBjYS5jcmwwHQYDVR0O
-BBYEFCkAQ-DGkwX04nv_NdJ5BvpUl3YjMA4GA1UdDwEB_wQEAwIHgDAPBgkqhkiG92NkBjoEAgUA
-MA0GCSqGSIb3DQEBCwUAA4IBAQBA51NbANKWAu-nYD7W27ilNY9YRzstmIC5_nOz1o_RTQR_Zbps
-s1G8bzM-53F6OgL8MFI2ummWpXfSL2k_bX6Y_FtCYkoyWdF-rVexy0WeCkjeRgc1G14DGy5ontva
-qGzENwiFoECYoxI4cBANSDVkhZNWBzfZ2lY4cCWo4U9oVyxYDBoWSd4_JTZzWNzlX3koj7kLA7vh
-nPUW53hsEk_BsH5x10qy_tEBNOKPbh4vC3q0wbEyhk6_W5iEaE9nh0_Anrq0MfQJtIo91t4QKkvE
-jcNN1OrFYpmYGevd0X3H99npvad4XiYUX2Pmf0Ro8ChhvcDhFeBAq_9h6HvAOUoMMIIERDCCAyyg
-AwIBAgIIXGPK5Eo3U8kwDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkFw
-cGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQD
-Ew1BcHBsZSBSb290IENBMB4XDTE3MDUxMDIxMjczMFoXDTMwMTIzMTAwMDAwMFowczEtMCsGA1UE
-AwwkQXBwbGUgaVBob25lIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJRWoBDz6DBIbH_L_cXvAege4XMHNjJi7ePXokzZM-
-TzlHunW-88DS8Vmiqx_-CoY82S2aB_IOa7kpkRpfIgqL8XJYBa5MS0TFeaeAPLCI4IwMJ4RdGeWH
-GTbL48V2t7D0QXJR9AVcg0uibaZRuPEm33terWUMxrKYUYy7fRtMwU7ICMfS7WQLtN0bjU9AfRuP
-SJaSW_PQmH7ZvKQZDplhu0FdAcxbd3p9JNDc01P_w9zFlCy2Wk2OGCM5vdnGUj7R8vQliqEqh_3Y
-DEYpUf_tF2yJJWuHv4ppFJ93n8MVt2iziEW9hOYGAkFkD60qKLgVyeCsp4q6cgQ0sniM-LKFAgMB
-AAGjgewwgekwDwYDVR0TAQH_BAUwAwEB_zAfBgNVHSMEGDAWgBQr0GlHlHYJ_vRrjS5ApvdHTX8I
-XjBEBggrBgEFBQcBAQQ4MDYwNAYIKwYBBQUHMAGGKGh0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3Nw
-MDMtYXBwbGVyb290Y2EwLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2NybC5hcHBsZS5jb20vcm9v
-dC5jcmwwHQYDVR0OBBYEFG_xlRhiXODI8cXtbBjJ4NNkUpggMA4GA1UdDwEB_wQEAwIBBjAQBgoq
-hkiG92NkBgISBAIFADANBgkqhkiG9w0BAQsFAAOCAQEAOs-smI2-kiAhCa2V87FcIfo2LVcgRHRz
-ZJIIs5as922X-ls0OCfPEkbTPBHwB8mZkLHR6BEJpeOla2xjCD-eJfrVmZxM5uXOjrJNaOyLq6Oi
-T4oRFT7cFCscxkS2b2fFW0-VKS2HXD_cgx53T-3aVKct5xOBwWPEVAsbSwpqKCII1DeSfH9nKF-v
-PT-3rFkdODRkWu4zShlCRCnEyhhr4cFTLS30TcIV9jMyGHjxJm-KTeuUTKPo_w-zA4tl2usu2GVQ
-n9yfit8xqIRU3FJSQdKyEx0xRkeIXz7uw_KMIwSV66yKPoJsBp8u44tDmmJbNA30mc8s7rpyhhkj
-pfyOtTCCBLswggOjoAMCAQICAQIwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCVVMxEzARBgNV
-BAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYw
-FAYDVQQDEw1BcHBsZSBSb290IENBMB4XDTA2MDQyNTIxNDAzNloXDTM1MDIwOTIxNDAzNlowYjEL
-MAkGA1UEBhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA5JGpCR-R2x5HUOsF7V55hC3rNqJXTFXsixmJ3vlLbPUHqyIwAugYPvhQ
-CdN_QaiY-dHKZpwkaxHQo7vkGyrDH5WeegykR4tb1BY3M8vED03OFGnRyRly9V0O1X9fm_IlA7pV
-j01dDfFkNSMVSxVZHbOU9_acns9QusFYUGePCLQg98usLCBvcLY_ATCMt0PPD5098ytJKBrI_s61
-uQ7ZXhzWyz21Oq30Dw4AkguxIRYudNU8DdtiFqujcZJHU1XBry9Bs_j743DN5qNMRX4fTGtQlkGJ
-xHRiCxCDQYczioGxMFjsWgQyjGizjx3eZXP_Z15lvEnYdp8zFGWhd5TJLQIDAQABo4IBejCCAXYw
-DgYDVR0PAQH_BAQDAgEGMA8GA1UdEwEB_wQFMAMBAf8wHQYDVR0OBBYEFCvQaUeUdgn-9GuNLkCm
-90dNfwheMB8GA1UdIwQYMBaAFCvQaUeUdgn-9GuNLkCm90dNfwheMIIBEQYDVR0gBIIBCDCCAQQw
-ggEABgkqhkiG92NkBQEwgfIwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9hcHBs
-ZWNhLzCBwwYIKwYBBQUHAgIwgbYagbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFu
-eSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2Vy
-dGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjANBgkqhkiG9w0BAQUFAAOCAQEAXDaZTC14
-t-2Mm9zzd5vydtJ3ME_BH4WDhRuZPUc38qmbQI4s1LGQEti-9HOb7tJkD8t5TzTYoj75eP9ryAfs
-fTmDi1Mg0zjEsb-aTwpr_yv8WacFCXwXQFYRHnTTt4sjO0ej1W8k4uvRt3DfD0XhJ8rxbXjt57UX
-F6jcfiI1yiXV2Q_Wa9SiJCMR96Gsj3OBYMYbWwkvkrL4REjwYDieFfU9JmcgijNq9w2Cz97roy_5
-U2pbZMBjM3f3OgcsVuvaDyEO2rpzGU-12TZ_wYdV2aeZuTJC-9jVcZ5-oVK3G72TQiQSKscPHbZN
-nF5jyEuAF1CqitXa5PzQCQc3sHV1ITGCAoUwggKBAgEBMH8wczEtMCsGA1UEAwwkQXBwbGUgaVBo
-b25lIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMCCGPwVvLPIlfzMAkGBSsOAwIa
-BQCggdwwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwNzE4MTQ1
-NTA1WjAjBgkqhkiG9w0BCQQxFgQUYwvDx1yr56NtJEdxh--NMv9wqDEwKQYJKoZIhvcNAQk0MRww
-GjAJBgUrDgMCGgUAoQ0GCSqGSIb3DQEBAQUAMFIGCSqGSIb3DQEJDzFFMEMwCgYIKoZIhvcNAwcw
-DgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMA0G
-CSqGSIb3DQEBAQUABIIBAJ6WUgCnMMT4q4LQjeOOpLWsXJRdns3b5aBEKoK3NIetn3I_bWo0wmX3
-Rxuy29Ljv_0bGC0PfcXyBXWtg1LQ4EzUpgpVK_IeZrlX6HcKwxgZwkejwVg009kTYNir-otXP1AM
-YNfXsPA-woLAbo_Hx0MrN1EHgejqO8x5c9s7LpQQGJpVsD9Rq6sZ4VJftMtuTz4XwvU3Qypj7_RF
-Drhh-MekYg6qG7aJMzOuftkDx2BWL7Sld77ViX1Qt8zZpyoI4RW4MIxH50ERwVYlpaoHYdnit3Ct
-RZki8aS0kxFdxVY0pePF0k6h-5GbwceXATkXM4UY0-fAXqk11QevHKT8was
diff --git a/public/applepay/apple-developer-merchantid-domain-association-prod.txt b/public/applepay/apple-developer-merchantid-domain-association-prod.txt
deleted file mode 100644
index f358f5b28..000000000
--- a/public/applepay/apple-developer-merchantid-domain-association-prod.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-MIIQaQYJKoZIhvcNAQcCoIIQWjCCEFYCAQExCzAJBgUrDgMCGgUAMHgGCSqGSIb3DQEHAaBrBGl7
-InRlYW1JZCI6IlY4SFNZMzlOWjUiLCJkb21haW4iOiJ3d3ctdGVzdDIuc2FmZWxpdGUuY29tIiwi
-ZGF0ZUNyZWF0ZWQiOiIyMDI0LTA3LTE4LDE0OjU1OjA1IiwidmVyc2lvbiI6MX2ggg0_MIIENDCC
-AxygAwIBAgIIY_BW8s8iV_MwDQYJKoZIhvcNAQELBQAwczEtMCsGA1UEAwwkQXBwbGUgaVBob25l
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwHhcNMjQwMTMwMTgzMjA1WhcNMjkw
-MTI4MTgzMjA0WjBZMTUwMwYDVQQDDCxBcHBsZSBpUGhvbmUgT1MgUHJvdmlzaW9uaW5nIFByb2Zp
-bGUgU2lnbmluZzETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQC1FX_kJQ1chXPiyq7cbeqNGGn-pv_c_cwpLk2qcBWJD79H31jO
-WFlKCB2xoQ229iBxUncHfWR_QmmLKHvyw0A9s3CBF8nkhi2ZVzd1wNTjtjcc2Dcm7kAsi3Hw7xRj
-TOS_0S-HUEUdpxJxkbQX9sNJQHBt64923LXzwWH5JKwxWb5X_kqWxYoAlse5CjmYUeqATgKGEejt
-eO1HxmV6-LAL1Ycpfmab7T296Dm6fUhkO-eIB1-efCGWkBQAV0BlJq7bo4O8jRv3o4VjOjf0rtDO
-FG8RVCdSsGjLtGs-0gDEORTorEdwUlY2X54rPlOZpuOA0lN4N7tz35kMtxySmq9lAgMBAAGjgeUw
-geIwDAYDVR0TAQH_BAIwADAfBgNVHSMEGDAWgBRv8ZUYYlzgyPHF7WwYyeDTZFKYIDBABggrBgEF
-BQcBAQQ0MDIwMAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3NwMDMtYWlwY2Ew
-NzAvBgNVHR8EKDAmMCSgIqAghh5odHRwOi8vY3JsLmFwcGxlLmNvbS9haXBjYS5jcmwwHQYDVR0O
-BBYEFCkAQ-DGkwX04nv_NdJ5BvpUl3YjMA4GA1UdDwEB_wQEAwIHgDAPBgkqhkiG92NkBjoEAgUA
-MA0GCSqGSIb3DQEBCwUAA4IBAQBA51NbANKWAu-nYD7W27ilNY9YRzstmIC5_nOz1o_RTQR_Zbps
-s1G8bzM-53F6OgL8MFI2ummWpXfSL2k_bX6Y_FtCYkoyWdF-rVexy0WeCkjeRgc1G14DGy5ontva
-qGzENwiFoECYoxI4cBANSDVkhZNWBzfZ2lY4cCWo4U9oVyxYDBoWSd4_JTZzWNzlX3koj7kLA7vh
-nPUW53hsEk_BsH5x10qy_tEBNOKPbh4vC3q0wbEyhk6_W5iEaE9nh0_Anrq0MfQJtIo91t4QKkvE
-jcNN1OrFYpmYGevd0X3H99npvad4XiYUX2Pmf0Ro8ChhvcDhFeBAq_9h6HvAOUoMMIIERDCCAyyg
-AwIBAgIIXGPK5Eo3U8kwDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkFw
-cGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQD
-Ew1BcHBsZSBSb290IENBMB4XDTE3MDUxMDIxMjczMFoXDTMwMTIzMTAwMDAwMFowczEtMCsGA1UE
-AwwkQXBwbGUgaVBob25lIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJRWoBDz6DBIbH_L_cXvAege4XMHNjJi7ePXokzZM-
-TzlHunW-88DS8Vmiqx_-CoY82S2aB_IOa7kpkRpfIgqL8XJYBa5MS0TFeaeAPLCI4IwMJ4RdGeWH
-GTbL48V2t7D0QXJR9AVcg0uibaZRuPEm33terWUMxrKYUYy7fRtMwU7ICMfS7WQLtN0bjU9AfRuP
-SJaSW_PQmH7ZvKQZDplhu0FdAcxbd3p9JNDc01P_w9zFlCy2Wk2OGCM5vdnGUj7R8vQliqEqh_3Y
-DEYpUf_tF2yJJWuHv4ppFJ93n8MVt2iziEW9hOYGAkFkD60qKLgVyeCsp4q6cgQ0sniM-LKFAgMB
-AAGjgewwgekwDwYDVR0TAQH_BAUwAwEB_zAfBgNVHSMEGDAWgBQr0GlHlHYJ_vRrjS5ApvdHTX8I
-XjBEBggrBgEFBQcBAQQ4MDYwNAYIKwYBBQUHMAGGKGh0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3Nw
-MDMtYXBwbGVyb290Y2EwLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2NybC5hcHBsZS5jb20vcm9v
-dC5jcmwwHQYDVR0OBBYEFG_xlRhiXODI8cXtbBjJ4NNkUpggMA4GA1UdDwEB_wQEAwIBBjAQBgoq
-hkiG92NkBgISBAIFADANBgkqhkiG9w0BAQsFAAOCAQEAOs-smI2-kiAhCa2V87FcIfo2LVcgRHRz
-ZJIIs5as922X-ls0OCfPEkbTPBHwB8mZkLHR6BEJpeOla2xjCD-eJfrVmZxM5uXOjrJNaOyLq6Oi
-T4oRFT7cFCscxkS2b2fFW0-VKS2HXD_cgx53T-3aVKct5xOBwWPEVAsbSwpqKCII1DeSfH9nKF-v
-PT-3rFkdODRkWu4zShlCRCnEyhhr4cFTLS30TcIV9jMyGHjxJm-KTeuUTKPo_w-zA4tl2usu2GVQ
-n9yfit8xqIRU3FJSQdKyEx0xRkeIXz7uw_KMIwSV66yKPoJsBp8u44tDmmJbNA30mc8s7rpyhhkj
-pfyOtTCCBLswggOjoAMCAQICAQIwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCVVMxEzARBgNV
-BAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYw
-FAYDVQQDEw1BcHBsZSBSb290IENBMB4XDTA2MDQyNTIxNDAzNloXDTM1MDIwOTIxNDAzNlowYjEL
-MAkGA1UEBhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA5JGpCR-R2x5HUOsF7V55hC3rNqJXTFXsixmJ3vlLbPUHqyIwAugYPvhQ
-CdN_QaiY-dHKZpwkaxHQo7vkGyrDH5WeegykR4tb1BY3M8vED03OFGnRyRly9V0O1X9fm_IlA7pV
-j01dDfFkNSMVSxVZHbOU9_acns9QusFYUGePCLQg98usLCBvcLY_ATCMt0PPD5098ytJKBrI_s61
-uQ7ZXhzWyz21Oq30Dw4AkguxIRYudNU8DdtiFqujcZJHU1XBry9Bs_j743DN5qNMRX4fTGtQlkGJ
-xHRiCxCDQYczioGxMFjsWgQyjGizjx3eZXP_Z15lvEnYdp8zFGWhd5TJLQIDAQABo4IBejCCAXYw
-DgYDVR0PAQH_BAQDAgEGMA8GA1UdEwEB_wQFMAMBAf8wHQYDVR0OBBYEFCvQaUeUdgn-9GuNLkCm
-90dNfwheMB8GA1UdIwQYMBaAFCvQaUeUdgn-9GuNLkCm90dNfwheMIIBEQYDVR0gBIIBCDCCAQQw
-ggEABgkqhkiG92NkBQEwgfIwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9hcHBs
-ZWNhLzCBwwYIKwYBBQUHAgIwgbYagbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFu
-eSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2Vy
-dGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjANBgkqhkiG9w0BAQUFAAOCAQEAXDaZTC14
-t-2Mm9zzd5vydtJ3ME_BH4WDhRuZPUc38qmbQI4s1LGQEti-9HOb7tJkD8t5TzTYoj75eP9ryAfs
-fTmDi1Mg0zjEsb-aTwpr_yv8WacFCXwXQFYRHnTTt4sjO0ej1W8k4uvRt3DfD0XhJ8rxbXjt57UX
-F6jcfiI1yiXV2Q_Wa9SiJCMR96Gsj3OBYMYbWwkvkrL4REjwYDieFfU9JmcgijNq9w2Cz97roy_5
-U2pbZMBjM3f3OgcsVuvaDyEO2rpzGU-12TZ_wYdV2aeZuTJC-9jVcZ5-oVK3G72TQiQSKscPHbZN
-nF5jyEuAF1CqitXa5PzQCQc3sHV1ITGCAoUwggKBAgEBMH8wczEtMCsGA1UEAwwkQXBwbGUgaVBo
-b25lIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMCCGPwVvLPIlfzMAkGBSsOAwIa
-BQCggdwwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwNzE4MTQ1
-NTA1WjAjBgkqhkiG9w0BCQQxFgQUYwvDx1yr56NtJEdxh--NMv9wqDEwKQYJKoZIhvcNAQk0MRww
-GjAJBgUrDgMCGgUAoQ0GCSqGSIb3DQEBAQUAMFIGCSqGSIb3DQEJDzFFMEMwCgYIKoZIhvcNAwcw
-DgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMA0G
-CSqGSIb3DQEBAQUABIIBAJ6WUgCnMMT4q4LQjeOOpLWsXJRdns3b5aBEKoK3NIetn3I_bWo0wmX3
-Rxuy29Ljv_0bGC0PfcXyBXWtg1LQ4EzUpgpVK_IeZrlX6HcKwxgZwkejwVg009kTYNir-otXP1AM
-YNfXsPA-woLAbo_Hx0MrN1EHgejqO8x5c9s7LpQQGJpVsD9Rq6sZ4VJftMtuTz4XwvU3Qypj7_RF
-Drhh-MekYg6qG7aJMzOuftkDx2BWL7Sld77ViX1Qt8zZpyoI4RW4MIxH50ERwVYlpaoHYdnit3Ct
-RZki8aS0kxFdxVY0pePF0k6h-5GbwceXATkXM4UY0-fAXqk11QevHKT8was
diff --git a/src/constants/analytics.js b/src/constants/analytics.js
index b5b24660d..c3416edea 100644
--- a/src/constants/analytics.js
+++ b/src/constants/analytics.js
@@ -20,6 +20,7 @@ const GaActions = {
VIF: "vif",
SUBMITTED: "Submitted",
DISPLAYED: "Displayed",
+ CASH_QUOTE_DISPLAYED: "Cash quote displayed",
};
const GaLabels = {
diff --git a/src/constants/application-config.js b/src/constants/application-config.js
index d4a0ceb8c..a72b306d3 100644
--- a/src/constants/application-config.js
+++ b/src/constants/application-config.js
@@ -30,6 +30,7 @@ const applicationConfig = {
OUTLOOK_CALENDAR:
"https://outlook.office.com/calendar/deeplink/compose?path=/calendar/action/compose&rru=addevent",
FRONTEND_LOGGER_PATH: "/analytics/api/v1/logging",
+ AFFILIATE_COOKIE_CONTAINING_NAME: "_Track",
};
export { applicationConfig };
diff --git a/src/constants/dynamictext-mapper.js b/src/constants/dynamictext-mapper.js
index 9191c8781..047aa2526 100644
--- a/src/constants/dynamictext-mapper.js
+++ b/src/constants/dynamictext-mapper.js
@@ -19,6 +19,7 @@ const customMappings = {
{ key: "Passenger Vent", transformedValue: "passenger side vent glass" },
{ key: "Passenger Quarter", transformedValue: "passenger side quarter panel" },
{ key: "Passenger SlideDoor", transformedValue: "passenger side sliding door" },
+ { key: "Passenger SideDoor", transformedValue: "passenger side sliding door" },
],
};
diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js
index 2d4a823c2..43abf149c 100644
--- a/src/constants/endpoints.js
+++ b/src/constants/endpoints.js
@@ -37,11 +37,11 @@ const endpoints = {
method: "POST",
},
LookupVinByPlate: {
- url: "/vehicle/api/v1/vehicle/lookup-by-plate",
+ url: "/vehicle/api/v1/vehicle/lookup-vin-by-plate",
method: "POST",
},
LookupVinByAddress: {
- url: "/vehicle/api/v1/vehicle/lookup-by-address",
+ url: "/vehicle/api/v1/vehicle/lookup-vin-by-address",
method: "POST",
},
LookupVinByImage: {
diff --git a/src/constants/store-actions.js b/src/constants/store-actions.js
index 65cb13e9b..069079d35 100644
--- a/src/constants/store-actions.js
+++ b/src/constants/store-actions.js
@@ -93,6 +93,7 @@ const storeActions = {
SAVE_CCTOKEN: "saveCCToken",
SAVE_PAYPAL_TOKEN: "savePaypalToken",
SAVE_NEXTGEN_SETTLED_AMOUNT: "saveNextGenSettledAmount",
+ SAVE_IS_RECAL_ACK_OPT_IN: "saveIsRecalAckOptIn",
CREATE_SUBMITTED_ORDER: "createSubmittedOrder",
RESET_SUBMITTED_ORDER: "resetSubmittedOrder",
diff --git a/src/constants/store-mutations.js b/src/constants/store-mutations.js
index b248ac150..494be36e3 100644
--- a/src/constants/store-mutations.js
+++ b/src/constants/store-mutations.js
@@ -60,6 +60,7 @@ const storeMutations = {
Customer_Portal_Login_Token: "updateCustomerPortalLoginToken",
LOCK_TOKEN: "updateLockToken",
UPDATE_SETTLED_TENDER_AMOUNT: "updateSettledTenderAmount",
+ UPDATE_IS_RECAL_ACK_OPT_IN: "updateIsRecalAckOptIn",
// EVENT BUS MUTATIONS
ADD_EVENT_TO_BUS: "addEventToBus",
@@ -110,6 +111,9 @@ const storeMutations = {
RESET_EXTERNAL_PARAMETER_SERVICEZIP_STATE: "resetExternalParameterServiceZipState",
RESET_EXTERNAL_PARAMETER_QUOTE_STATE: "resetExternalParameterQuoteState",
RESET_IS_EXTERNAL_PARAMETER: "resetIsExternalParameter",
+
+ //Affiliate Cookies
+ UPDATE_AFFILIATE_COOKIES: "updateAffiliateCookies",
};
export { storeMutations };
diff --git a/src/fmg-components/cart/cart.spec.js b/src/fmg-components/cart/cart.spec.js
index 3e1e9760f..10207c8bb 100644
--- a/src/fmg-components/cart/cart.spec.js
+++ b/src/fmg-components/cart/cart.spec.js
@@ -263,6 +263,49 @@ describe("cart.vue", () => {
expect(found).toBe(true);
});
+ // Mobile Fee Cart Item
+ test("if there is mobile fee on the order, a mobile fee cart item should be added to the cart", () => {
+ // Arrange
+ const lineItems = {
+ glassParts: [],
+ supportingItems: [
+ {
+ description: null,
+ id: "9ff98501-03a4-432b-884e-e4e28f884a2f",
+ kitPrice: 0,
+ laborAmount: 34.98,
+ partNumber: "MOBILE FEE",
+ partType: "MOBILE FEE",
+ salesTax: 2.62,
+ sellingPrice: 0,
+ },
+ ],
+ vaps: [],
+ promos: [],
+ };
+
+ const availableVaps = [];
+
+ // Act
+ const { wrapper } = setupMocks({
+ props: {
+ modelValue: lineItems,
+ availableVaps: availableVaps,
+ },
+ });
+
+ // Assert
+ expect(wrapper.vm.mobileFeeCartItem).not.toBeNull();
+ expect(wrapper.vm.mobileFeeCartItem.subTotal).toEqual(34.98);
+ expect(wrapper.vm.mobileFeeCartItem.salesTax).toEqual(2.62);
+
+ const found =
+ wrapper.vm.cartItems.findIndex(
+ (cartItem) => cartItem == wrapper.vm.mobileFeeCartItem
+ ) >= 0;
+ expect(found).toBe(true);
+ });
+
// Service package discount Fee Cart Item
test("if there is service package discount fee on the order, a service package discount cart item should be added to the cart", () => {
// Arrange
diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue
index a712b8127..a1ef90c50 100644
--- a/src/fmg-components/cart/cart.vue
+++ b/src/fmg-components/cart/cart.vue
@@ -377,6 +377,10 @@ export default {
cartItems.push(this.suppliesRepairCartItem);
}
+ if (this.mobileFeeCartItem) {
+ cartItems.push(this.mobileFeeCartItem);
+ }
+
if (this.servicePackageDiscountCartItem) {
cartItems.push(this.servicePackageDiscountCartItem);
}
@@ -756,6 +760,39 @@ export default {
return cartItem;
},
+ mobileFeeCartItemName() {
+ return this.getCmsContent("MobileServiceTextWidget", "Text");
+ },
+ mobileFeeCartItem() {
+ let cartItem = null;
+ const mobileFeeLineItem = this.supportingItems.find(
+ (lineItem) => lineItem.partType == partTypeStrings.MOBILE_FEE
+ );
+
+ if (mobileFeeLineItem) {
+ cartItem = {
+ name: this.mobileFeeCartItemName,
+ category: cartItemCategories.SUPPORTING_ITEMS,
+ cartItemType: cartItemTypes.MOBILE_FEE,
+ isDisplayed: true,
+ isRemovable: false,
+ subTotal: 0,
+ salesTax: 0,
+ lineItems: [],
+ isCoveredByInsurance: cartItemTypesCoveredByInsurance.includes(
+ cartItemTypes.MOBILE_FEE
+ ),
+ };
+ mobileFeeLineItem.cartItemType = cartItem.cartItemType;
+ cartItem.lineItems.push(mobileFeeLineItem);
+ cartItem.subTotal +=
+ (mobileFeeLineItem.kitPrice ?? 0) +
+ (mobileFeeLineItem.laborAmount ?? 0) +
+ (mobileFeeLineItem.sellingPrice ?? 0);
+ cartItem.salesTax += mobileFeeLineItem.salesTax ?? 0;
+ }
+ return cartItem;
+ },
servicePackageDiscountCartItemName() {
return this.getCmsContent("ServicePackageDiscountTextWidget", "Text");
},
diff --git a/src/global-methods.js b/src/global-methods.js
index c471a8c63..9426acede 100644
--- a/src/global-methods.js
+++ b/src/global-methods.js
@@ -98,15 +98,17 @@ export default {
);
}
- // Do not route to error logic when no wipers found or no promo found (404s)
if (error.response.status != "404") {
- //router.navigateError(); Emergency change for testing - skiener 03/12
- }
+ // Do not route to error logic when no wipers found or no promo found (404s)
+ router.navigateError();
- global.$logger.logError(
- `${method}: ${endpoint}: ${error.message}`,
- error.response
- );
+ // do not log 404 errors from services because we return NotFound
+ // when a service doesn't return an object
+ global.$logger.logError(
+ `${method}: ${endpoint}: ${error.message}`,
+ error.response
+ );
+ }
return reject(error.response);
}
diff --git a/src/helpers/duration-length-helper.js b/src/helpers/duration-length-helper.js
new file mode 100644
index 000000000..cd57f2c4e
--- /dev/null
+++ b/src/helpers/duration-length-helper.js
@@ -0,0 +1,15 @@
+export function getDisplayTextForDurationLength(durationMinimum, durationMaximum) {
+ const isLongAppointment = durationMaximum >= 120;
+ const isDurationRange = durationMinimum !== durationMaximum;
+
+ const adjustedMinimum = isLongAppointment ? durationMinimum / 60 : durationMinimum;
+ const adjustedMaximum = isLongAppointment ? durationMaximum / 60 : durationMaximum;
+
+ const durationText = isDurationRange
+ ? `${adjustedMinimum} - ${adjustedMaximum}`
+ : adjustedMinimum;
+
+ const unitText = isLongAppointment ? "hours" : "minutes";
+
+ return `${durationText} ${unitText}`;
+}
diff --git a/src/helpers/duration-length-helper.spec.js b/src/helpers/duration-length-helper.spec.js
new file mode 100644
index 000000000..b35585311
--- /dev/null
+++ b/src/helpers/duration-length-helper.spec.js
@@ -0,0 +1,24 @@
+import { getDisplayTextForDurationLength } from "@/helpers/duration-length-helper";
+
+describe("damage-length-helper.js", () => {
+ it("Should return the expected duration for the appointment in hours", () => {
+ // Arrange / Act
+ const durationMinimum = 60;
+ const durationMaximum = 120;
+
+ const duration = getDisplayTextForDurationLength(durationMinimum, durationMaximum);
+
+ // Assert
+ expect(duration).toEqual("1 - 2 hours");
+ });
+ it("Should return the expected duration for the appointment in minutes", () => {
+ // Arrange / Act
+ const durationMinimum = 30;
+ const durationMaximum = 45;
+
+ const duration = getDisplayTextForDurationLength(durationMinimum, durationMaximum);
+
+ // Assert
+ expect(duration).toEqual("30 - 45 minutes");
+ });
+});
diff --git a/src/helpers/heritage-integration/cookie-helper.js b/src/helpers/heritage-integration/cookie-helper.js
index 579993795..1b7b551ca 100644
--- a/src/helpers/heritage-integration/cookie-helper.js
+++ b/src/helpers/heritage-integration/cookie-helper.js
@@ -210,6 +210,17 @@ export function refreshCookieExpiration(name, expirationTime) {
}
}
+export function getAffiliateCookies() {
+ const affiliateCookies = [];
+ const cookieContainingName = applicationConfig.AFFILIATE_COOKIE_CONTAINING_NAME;
+ const affiliateCookiesAll = getCookiesContainingName(cookieContainingName);
+ affiliateCookiesAll?.forEach((cookieName) => {
+ const cookieValue = getCookieValueByName(cookieName);
+ affiliateCookies.push({ CookieName: cookieName, CookieValue: cookieValue });
+ });
+ return affiliateCookies;
+}
+
/*
===========================
= PRIVATE FUNCTIONS =
@@ -292,3 +303,15 @@ function getCookieValueByName(name) {
function isLocalhost() {
return location.hostname.includes("localhost");
}
+
+function getCookiesContainingName(name) {
+ const allCookies = document.cookie.split(";");
+ const matchingCookies = [];
+ for (const cookie of allCookies) {
+ const [cookieName, cookieValue] = cookie.trim().split("=");
+ if (cookieName.includes(name)) {
+ matchingCookies.push(cookieName);
+ }
+ }
+ return matchingCookies;
+}
diff --git a/src/helpers/heritage-integration/cookie-helper.spec.js b/src/helpers/heritage-integration/cookie-helper.spec.js
index 34ae00b86..a18906381 100644
--- a/src/helpers/heritage-integration/cookie-helper.spec.js
+++ b/src/helpers/heritage-integration/cookie-helper.spec.js
@@ -11,9 +11,15 @@ import {
setSessionIdIfUnset,
isCookieSet,
refreshCookieExpiration,
+ getAffiliateCookies,
} from "@/helpers/heritage-integration/cookie-helper.js";
import { cookieNames } from "@/constants/cookie-names";
-import { removeAllTestCookies, setupCookies, setupCrypto } from "@/helpers/unit-test-helper";
+import {
+ removeAllTestCookies,
+ setupCookies,
+ setupCrypto,
+ setupAffiliateCookies,
+} from "@/helpers/unit-test-helper";
import { deleteFunnelCookie } from "./cookie-helper";
const randomUUID = "68d89736-c277-46f1-8fee-c3dacdb23c08";
@@ -431,3 +437,21 @@ describe("cookies", () => {
});
});
});
+describe("getAffiliateCookies", () => {
+ it("should return an empty array if no affiliate cookies are found", () => {
+ setupAffiliateCookies({});
+ expect(getAffiliateCookies()).toEqual([]);
+ });
+
+ it("should return an array of affiliate cookies when they are present", () => {
+ setupAffiliateCookies({
+ CookieName: "affiliate_cookie1_Track",
+ CookieValue: "value_of_affiliate_cookie1",
+ });
+
+ const expectedCookies = [
+ { CookieName: "affiliate_cookie1_Track", CookieValue: "value_of_affiliate_cookie1" },
+ ];
+ expect(getAffiliateCookies()).toEqual(expectedCookies);
+ });
+});
diff --git a/src/helpers/unit-test-helper.js b/src/helpers/unit-test-helper.js
index 2cd580df0..7c3c9ed4e 100644
--- a/src/helpers/unit-test-helper.js
+++ b/src/helpers/unit-test-helper.js
@@ -139,6 +139,10 @@ export function setupCookies({ funnelCookieValue = "", includeHeritageCookie = t
});
}
+export function setupAffiliateCookies(cookie) {
+ setCookieProperties({ [cookie.CookieName]: cookie.CookieValue }, { isSecure: false });
+}
+
export function setupCrypto(mockValue) {
global.crypto = {
randomUUID: jest.fn(),
diff --git a/src/layouts/confirmation/confirmation.spec.js b/src/layouts/confirmation/confirmation.spec.js
index 0d8a1b273..a079fab83 100644
--- a/src/layouts/confirmation/confirmation.spec.js
+++ b/src/layouts/confirmation/confirmation.spec.js
@@ -1,6 +1,6 @@
// Components
import confirmation from "@/layouts/confirmation/confirmation.vue";
-import { AppointmentTypeStrings } from "@/constants/schedule-constants";
+import { AppointmentTypeStrings, RouteCodeFlags } from "@/constants/schedule-constants";
import { applicationConfig } from "@/constants/application-config.js";
// Supporting Files
@@ -25,6 +25,8 @@ beforeEach(() => {
startTime: "09:00",
endTime: "10:00",
routeCode: "000",
+ jobMaxMinutes: "120",
+ jobMinMinutes: "60",
},
lineItems: {
glassParts: [
@@ -360,6 +362,69 @@ describe("computed properties...", () => {
// Assert
expect(testValue).toEqual("test1,
test, AZ 12345");
});
+ test("Appointment Duration should return text in expected format.", () => {
+ //Arrange
+
+ const { wrapper } = setupMocks({});
+
+ // Act
+ const testValue = wrapper.vm.AppointmentDuration;
+
+ // Assert
+ expect(testValue).toEqual("Duration: 1 - 2 hours");
+ });
+ test("Appointment Duration should return with correct duration values in expected format for hours.", () => {
+ //Arrange
+ store.getters.submittedOrder.schedule.jobMaxMinutes = 120;
+ store.getters.submittedOrder.schedule.jobMinMinutes = 60;
+ const { wrapper } = setupMocks({});
+
+ // Act
+ const testValue = wrapper.vm.AppointmentDuration;
+
+ // Assert
+ expect(testValue).toEqual("Duration: 1 - 2 hours");
+ });
+ test("Appointment Duration should return with correct duration values in expected format for minutes.", () => {
+ //Arrange
+ store.getters.submittedOrder.schedule.jobMaxMinutes = 45;
+ store.getters.submittedOrder.schedule.jobMinMinutes = 30;
+ const { wrapper } = setupMocks({});
+
+ // Act
+ const testValue = wrapper.vm.AppointmentDuration;
+
+ // Assert
+ expect(testValue).toEqual("Duration: 30 - 45 minutes");
+ });
+
+ test("Appointment Duration should return with All Day.", () => {
+ //Arrange
+ store.getters.submittedOrder.schedule.jobMaxMinutes = 45;
+ store.getters.submittedOrder.schedule.jobMinMinutes = 30;
+ store.getters.submittedOrder.schedule.routeCode = RouteCodeFlags.ALL_DAY_DROP_OFF;
+ const { wrapper } = setupMocks({});
+
+ // Act
+ const testValue = wrapper.vm.AppointmentDuration;
+
+ // Assert
+ expect(testValue).toEqual("Duration: All Day");
+ });
+
+ test("Appointment Duration should return with Overnight.", () => {
+ //Arrange
+ store.getters.submittedOrder.schedule.jobMaxMinutes = 45;
+ store.getters.submittedOrder.schedule.jobMinMinutes = 30;
+ store.getters.submittedOrder.schedule.routeCode = RouteCodeFlags.OVERNIGHT_DROP_OFF;
+ const { wrapper } = setupMocks({});
+
+ // Act
+ const testValue = wrapper.vm.AppointmentDuration;
+
+ // Assert
+ expect(testValue).toEqual("Duration: Overnight");
+ });
});
function setupMocks({ customMountOptions }) {
diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue
index 39ba55f17..b46154756 100644
--- a/src/layouts/confirmation/confirmation.vue
+++ b/src/layouts/confirmation/confirmation.vue
@@ -42,6 +42,12 @@
:scheduleEndTime="ScheduleEndTime" />