updated endpoint to get prohibited states with single source of truth
This commit is contained in:
hiteshkumar87 2023-03-02 12:52:51 +05:30
parent 3f8efc5cd8
commit dec8f048d6
4 changed files with 69 additions and 5 deletions

View file

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

View file

@ -5,6 +5,7 @@ import { issPageValues } from '@/router/router-constants/issPage-values';
import { queryStrings } from '@/constants/query-strings'; import { queryStrings } from '@/constants/query-strings';
import { GaActions } from "@/constants/analytics"; import { GaActions } from "@/constants/analytics";
import VehicleLookup from './vehicle-lookup.vue'; import VehicleLookup from './vehicle-lookup.vue';
import VIN_LOOKUP_METHODS from '@/constants/vin-lookup-methods';
const vinLookupMethodsMockData = { const vinLookupMethodsMockData = {
QuestionText: 'To find the right part, lets get your VIN. Or we can look it up for you!', QuestionText: 'To find the right part, lets get your VIN. Or we can look it up for you!',
@ -48,6 +49,10 @@ function setupMocks() {
navigate: jest.fn(), navigate: jest.fn(),
}; };
const mockIsVinbyAddressPermissibleToBeFalse={
IsVinbyAddressPermissible:false,
};
const wrapper = mount(VehicleLookup, { const wrapper = mount(VehicleLookup, {
data() { data() {
return { return {
@ -105,10 +110,29 @@ function setupMocks() {
}, },
}); });
return { mockRoute, mockRouter, wrapper }; return { mockRoute, mockRouter, wrapper,mockIsVinbyAddressPermissibleToBeFalse };
} }
describe('vehicle-lookup.vue', () => { 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(VIN_LOOKUP_METHODS.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.', () => { test('"Continue" button is disabled when no VIN Lookup method is selected.', () => {
const { wrapper } = setupMocks(); const { wrapper } = setupMocks();

View file

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

View file

@ -298,7 +298,22 @@ export const useMainStore = defineStore({
payload: {}, 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) { async lookupVinByPlate(licensePlate, licenseState) {
try { try {
const response = await globalMethods.callHttpClient({ const response = await globalMethods.callHttpClient({