Merge pull request #181 from Safelite/feture/DIGITAL/SSR-268-new

SSR-268
This commit is contained in:
hiteshkumar87 2023-03-03 12:59:26 +05:30 committed by GitHub
commit 8053bcbabe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 78 additions and 14 deletions

View file

@ -98,6 +98,10 @@ const endpoints = {
url: "/clientauth/api/v1/clientauth/validateClientTag",
method: "GET",
},
IsVinbyAddressPermissible:{
url:"/vehicle/api/v1/vehicle/is-vin-by-address-permissible",
method:"Get",
}
};
export { endpoints };

View file

@ -1,7 +1,7 @@
const VIN_LOOKUP_METHODS = Object.freeze({
manualVin: 'ManualVin',
licensePlate: 'LicensePlate',
homeAddress: 'HomeAddress',
const vinLookupMethodSelections = Object.freeze({
MANUALVIN: 'ManualVin',
LICENSEPLATE: 'LicensePlate',
HOMEADDRESS: 'HomeAddress',
});
export default VIN_LOOKUP_METHODS;
export {vinLookupMethodSelections};

View file

@ -5,6 +5,7 @@ import { issPageValues } from '@/router/router-constants/issPage-values';
import { queryStrings } from '@/constants/query-strings';
import { GaActions } from "@/constants/analytics";
import VehicleLookup from './vehicle-lookup.vue';
import {vinLookupMethodSelections} from '@/constants/vin-lookup-methods';
const vinLookupMethodsMockData = {
QuestionText: 'To find the right part, lets get your VIN. Or we can look it up for you!',
@ -47,6 +48,10 @@ function setupMocks() {
const mockRouter = {
navigate: jest.fn(),
};
const mockIsVinbyAddressPermissibleToBeFalse={
IsVinbyAddressPermissible:false,
};
const wrapper = mount(VehicleLookup, {
data() {
@ -95,7 +100,7 @@ function setupMocks() {
],
mocks: {
$route: mockRoute,
$router: mockRouter,
$router: mockRouter,
},
stubs: {
SiteHeader: true,
@ -105,10 +110,29 @@ function setupMocks() {
},
});
return { mockRoute, mockRouter, wrapper };
return { mockRoute, mockRouter, wrapper,mockIsVinbyAddressPermissibleToBeFalse };
}
describe('vehicle-lookup.vue', () => {
test('IsVinbyAddressPermissible to be false', () => {
const { wrapper,mockIsVinbyAddressPermissibleToBeFalse } = setupMocks();
const vinLookupMethodsWrapper = wrapper.findComponent({ name: 'vin-lookup-methods' });
// Not using initializeComponent() because it doesn't trigger reactivity in test.
const Answers = JSON.parse(JSON.stringify(vinLookupMethodsMockData.Answers));
if(!mockIsVinbyAddressPermissibleToBeFalse.IsVinbyAddressPermissible){
Answers.splice(Answers.indexOf(vinLookupMethodSelections.HOMEADDRESS),1);
}
vinLookupMethodsWrapper.setData({
questionTextFromCms: vinLookupMethodsMockData.QuestionText,
answersFromCms: Answers,
});
const lookupByAddressOptionLabel = wrapper.find('[data-test-id="vin-lookup-methods-button-question"] label[for="VinLookupMethods-HomeAddress"]');
expect(lookupByAddressOptionLabel.exists()).toBe(false);
});
test('"Continue" button is disabled when no VIN Lookup method is selected.', () => {
const { wrapper } = setupMocks();

View file

@ -38,7 +38,7 @@ import { fetchCmsContentForPage } from '@/helpers/cms-content-helper';
import { settleAllPromises } from '@/helpers/layout-helper';
import { Form } from 'vee-validate';
import BaseFormMixin from '@/mixins/base-form-mixin';
import VIN_LOOKUP_METHODS from '@/constants/vin-lookup-methods';
import {vinLookupMethodSelections} from '@/constants/vin-lookup-methods';
// Import Component
import SiteFooter from '@/iss-components/site-footer/site-footer.vue';
@ -98,13 +98,13 @@ export default {
},
forwardButtonAction() {
switch (this.selectedVinLookupMethod) {
case VIN_LOOKUP_METHODS.manualVin:
case vinLookupMethodSelections.MANUALVIN:
this.$router.navigate(this.navigationScenarios.SELECTED_MANUAL_VIN, this.$route);
break;
case VIN_LOOKUP_METHODS.licensePlate:
case vinLookupMethodSelections.LICENSEPLATE:
this.$router.navigate(this.navigationScenarios.SELECTED_LICENSE_PLATE, this.$route);
break;
case VIN_LOOKUP_METHODS.homeAddress:
case vinLookupMethodSelections.HOMEADDRESS:
this.$router.navigate(this.navigationScenarios.SELECTED_HOME_ADDRESS, this.$route);
break;
default:

View file

@ -16,6 +16,9 @@
import { defineRule } from 'vee-validate';
import { required } from '@/helpers/validation-rules';
import { errorMessages } from '@/constants/error-messages';
import { useMainStore } from "@/store";
import {vinLookupMethodSelections} from '@/constants/vin-lookup-methods';
import { settleAllPromises } from "@/helpers/layout-helper";
// Import Component
import ButtonQuestion from '@/digital-components/button-question/button-question.vue';
@ -38,6 +41,7 @@ export default {
required,
},
},
emits: ['update:modelValue'],
components: {
ButtonQuestion,
@ -53,14 +57,31 @@ export default {
},
},
methods: {
initializeComponent() {
async initializeComponent() {
const isVinbyAddressPermissible = await this.getIsVinbyAddressPermissible();
this.questionTextFromCms = this.getCmsContent(this.cmsWidgetName, 'QuestionText');
const answers = this.getCmsContent(this.cmsWidgetName, 'Answers');
if (Array.isArray(answers)) {
if(!isVinbyAddressPermissible){
answers.splice(answers.indexOf(vinLookupMethodSelections.HOMEADDRESS),1);
}
this.answersFromCms = answers;
}
},
async getIsVinbyAddressPermissible(){
const isVinbyAddressPermissibleResponse = useMainStore().getIsVinbyAddressPermissible();
// Settle promises and get results
const promiseResultMap = [
{
resultKey: "isVinbyAddressPermissible",
promise: isVinbyAddressPermissibleResponse,
}
];
const resultMap = await settleAllPromises(promiseResultMap);
return resultMap.isVinbyAddressPermissible;
}
},
};
</script>

View file

@ -298,7 +298,22 @@ export const useMainStore = defineStore({
payload: {},
});
},
getIsVinbyAddressPermissible(){
try{
const response = globalMethods.callHttpClient({
method:endpoints.IsVinbyAddressPermissible.method,
endpoint:`${endpoints.IsVinbyAddressPermissible.url}?state=${this.order.customer.address.state}`,
payload: {},
});
return response;
} catch (responseError) {
return {
error: {
status: responseError.status,
},
};
}
},
async lookupVinByPlate(licensePlate, licenseState) {
try {
const response = await globalMethods.callHttpClient({
@ -1028,7 +1043,7 @@ export const useMainStore = defineStore({
resetPartsAndDependencies() {
this.resetGlassPartsState();
this.updateSupportingItems(null);
},
},
},
persist: true
});