489 lines
20 KiB
TypeScript
489 lines
20 KiB
TypeScript
import UseBaseResource from "@cypress/component/UseBaseResource.vue";
|
|
|
|
const globalConfig = {
|
|
global: {
|
|
stores: ["mainStore", "navigationStore"],
|
|
testingStore: {
|
|
initialState: {
|
|
authorisedValues: {
|
|
av_test: [
|
|
{
|
|
description: "Test value",
|
|
value: "test_value",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
props: {
|
|
resourceConfig: cy.getBaseResourceConfig(),
|
|
},
|
|
};
|
|
|
|
describe("useBaseResource - toolbar methods", () => {
|
|
beforeEach(() => {
|
|
globalConfig.props.resourceConfig = cy.getBaseResourceConfig();
|
|
});
|
|
it("toolbarButtons - default buttons", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const toolbarButtons = baseResource.toolbarButtons.value;
|
|
|
|
const defaultButtonsShowComponent = toolbarButtons({}, "show", {});
|
|
expect(defaultButtonsShowComponent).to.have.length(2);
|
|
expect(defaultButtonsShowComponent[0].action).to.be.equal("edit");
|
|
expect(defaultButtonsShowComponent[1].action).to.be.equal("delete");
|
|
|
|
const defaultButtonsListComponent = toolbarButtons({}, "list", {});
|
|
expect(defaultButtonsListComponent).to.have.length(1);
|
|
expect(defaultButtonsListComponent[0].action).to.be.equal("add");
|
|
});
|
|
});
|
|
it("toolbarButtons - additional buttons", () => {
|
|
const additionalToolbarButtons = () => {
|
|
return {
|
|
list: [{ action: "testList", label: "Test" }],
|
|
show: [{ action: "testShow", label: "Test" }],
|
|
};
|
|
};
|
|
globalConfig.props.resourceConfig.additionalToolbarButtons =
|
|
additionalToolbarButtons;
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const toolbarButtons = baseResource.toolbarButtons.value;
|
|
|
|
const defaultButtonsShowComponent = toolbarButtons({}, "show", {});
|
|
expect(defaultButtonsShowComponent).to.have.length(3);
|
|
expect(defaultButtonsShowComponent[2].action).to.be.equal(
|
|
"testShow"
|
|
);
|
|
|
|
const defaultButtonsListComponent = toolbarButtons({}, "list", {});
|
|
expect(defaultButtonsListComponent).to.have.length(2);
|
|
expect(defaultButtonsListComponent[1].action).to.be.equal(
|
|
"testList"
|
|
);
|
|
});
|
|
});
|
|
it("toolbarButtons - additional buttons with the order set by the index property", () => {
|
|
const additionalToolbarButtons = () => {
|
|
return {
|
|
list: [{ action: "testList", label: "Test" }],
|
|
show: [{ action: "testShow", label: "Test", index: -1 }],
|
|
};
|
|
};
|
|
globalConfig.props.resourceConfig.additionalToolbarButtons =
|
|
additionalToolbarButtons;
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const toolbarButtons = baseResource.toolbarButtons.value;
|
|
|
|
const defaultButtonsShowComponent = toolbarButtons({}, "show", {});
|
|
expect(defaultButtonsShowComponent).to.have.length(3);
|
|
expect(defaultButtonsShowComponent[0].action).to.be.equal(
|
|
"testShow"
|
|
);
|
|
|
|
const defaultButtonsListComponent = toolbarButtons({}, "list", {});
|
|
expect(defaultButtonsListComponent).to.have.length(2);
|
|
expect(defaultButtonsListComponent[1].action).to.be.equal(
|
|
"testList"
|
|
);
|
|
});
|
|
});
|
|
it("goToResourceAdd", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const goToResourceAdd = baseResource.goToResourceAdd;
|
|
const router = baseResource.router;
|
|
cy.stub(router, "push");
|
|
goToResourceAdd();
|
|
expect(router.push).to.have.been.calledWith({ name: "testAdd" });
|
|
});
|
|
});
|
|
it("goToResourceEdit", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const goToResourceEdit = baseResource.goToResourceEdit;
|
|
const router = baseResource.router;
|
|
cy.stub(router, "push");
|
|
goToResourceEdit({ id: 1 });
|
|
expect(router.push).to.have.been.calledWith({
|
|
name: "testEdit",
|
|
params: {
|
|
id: 1,
|
|
},
|
|
});
|
|
});
|
|
});
|
|
it("goToResourceShow", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const goToResourceShow = baseResource.goToResourceShow;
|
|
const router = baseResource.router;
|
|
cy.stub(router, "push");
|
|
goToResourceShow({ id: 1 });
|
|
expect(router.push).to.have.been.calledWith({
|
|
name: "testShow",
|
|
params: {
|
|
id: 1,
|
|
},
|
|
});
|
|
});
|
|
});
|
|
it("goToResourceList", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const goToResourceList = baseResource.goToResourceList;
|
|
const router = baseResource.router;
|
|
cy.stub(router, "push");
|
|
goToResourceList({ id: 1 });
|
|
expect(router.push).to.have.been.calledWith({ name: "testList" });
|
|
});
|
|
});
|
|
// it("doResourceDelete", () => {
|
|
// cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
// cy.get_mainStore().then((mainStore) => {
|
|
// const baseResource = component.result;
|
|
// const doResourceDelete = baseResource.doResourceDelete;
|
|
// // const router = baseResource.router;
|
|
// // cy.stub(router, "push");
|
|
// cy.stub(mainStore, "setConfirmationDialog")
|
|
// // const confDialogSpy = cy.spy(mainStore, "setConfirmationDialog");
|
|
|
|
// doResourceDelete({id: 1, name: "Test"});
|
|
// expect(mainStore.setConfirmationDialog).to.have.been.called();
|
|
// })
|
|
// });
|
|
// });
|
|
});
|
|
|
|
describe("useBaseResource - datatables methods", () => {
|
|
beforeEach(() => {
|
|
globalConfig.props.resourceConfig = cy.getBaseResourceConfig();
|
|
});
|
|
it("getResourceTableUrl", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getResourceTableUrl = baseResource.getResourceTableUrl;
|
|
expect(getResourceTableUrl()).to.be.equal("testTableUrl");
|
|
});
|
|
});
|
|
it("getResourceShowURL", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getResourceShowURL = baseResource.getResourceShowURL;
|
|
const router = baseResource.router;
|
|
cy.stub(router, "resolve").callsFake(() => {
|
|
return {
|
|
href: "testShow",
|
|
};
|
|
});
|
|
getResourceShowURL(10);
|
|
expect(router.resolve).to.have.been.calledWith({
|
|
name: "testShow",
|
|
params: { id: 10 },
|
|
});
|
|
});
|
|
});
|
|
it("getFilterValues - no additionalFilters", () => {
|
|
const filters = {
|
|
filterValue: true,
|
|
anotherFilterValue: "filter",
|
|
andAnother: "another",
|
|
};
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getFilterValues = baseResource.getFilterValues;
|
|
const filterResult = getFilterValues(filters);
|
|
expect(Object.keys(filterResult)).to.have.length(3);
|
|
expect(filterResult.filterValue).to.equal(true);
|
|
expect(filterResult.anotherFilterValue).to.equal("filter");
|
|
expect(filterResult.andAnother).to.equal("another");
|
|
});
|
|
});
|
|
it("getFilterValues - with additionalFilters", () => {
|
|
const filters = {
|
|
filterValue: true,
|
|
};
|
|
globalConfig.props.resourceConfig.table.additionalFilters = [
|
|
{ name: "additionalFilter", value: "test" },
|
|
{ name: "filterValue", value: false },
|
|
];
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getFilterValues = baseResource.getFilterValues;
|
|
const filterResult = getFilterValues(filters);
|
|
expect(Object.keys(filterResult)).to.have.length(2);
|
|
expect(filterResult.filterValue).to.equal(true);
|
|
expect(filterResult.additionalFilter).to.equal("test");
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("useBaseResource - resource display methods", () => {
|
|
beforeEach(() => {
|
|
globalConfig.props.resourceConfig = cy.getBaseResourceConfig();
|
|
});
|
|
it("getFieldGroupings - form with no field groups", () => {
|
|
globalConfig.props.resourceConfig.resourceAttrs =
|
|
cy.getResourceAttrsWithNoGroups();
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getFieldGroupings = baseResource.getFieldGroupings;
|
|
const fieldGroupings = getFieldGroupings("Form");
|
|
expect(fieldGroupings[0].name).to.equal(null);
|
|
expect(fieldGroupings[0].fields).to.have.length(3);
|
|
expect(fieldGroupings[0].fields[2].name).to.equal("formField");
|
|
expect(
|
|
fieldGroupings[0].fields[1].relationshipFields[0]
|
|
.relationshipName
|
|
).to.equal("relationships");
|
|
expect(fieldGroupings[0].hasDataToDisplay).to.equal(false);
|
|
});
|
|
});
|
|
it("getFieldGroupings - show with no field groups", () => {
|
|
globalConfig.props.resourceConfig.resourceAttrs =
|
|
cy.getResourceAttrsWithNoGroups();
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getFieldGroupings = baseResource.getFieldGroupings;
|
|
const fieldGroupings = getFieldGroupings("Show", {
|
|
name: "A name value",
|
|
});
|
|
expect(fieldGroupings[0].name).to.equal(null);
|
|
expect(fieldGroupings[0].fields).to.have.length(4);
|
|
expect(fieldGroupings[0].fields[2].name).to.equal("showField");
|
|
expect(fieldGroupings[0].hasDataToDisplay).to.equal(true);
|
|
});
|
|
});
|
|
it("getFieldGroupings - show with no field group and additional fields", () => {
|
|
globalConfig.props.resourceConfig.resourceAttrs =
|
|
cy.getResourceAttrsWithNoGroups();
|
|
globalConfig.props.resourceConfig.extendedAttributesResourceType =
|
|
"test";
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getFieldGroupings = baseResource.getFieldGroupings;
|
|
const fieldGroupings = getFieldGroupings("Show", {
|
|
name: "A name value",
|
|
});
|
|
expect(fieldGroupings[0].fields[4].name).to.equal(
|
|
"additional_fields"
|
|
);
|
|
});
|
|
});
|
|
it("getFieldGroupings - form with field groups", () => {
|
|
globalConfig.props.resourceConfig.resourceAttrs =
|
|
cy.getResourceAttrsWithGroups();
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getFieldGroupings = baseResource.getFieldGroupings;
|
|
const fieldGroupings = getFieldGroupings("Form");
|
|
expect(fieldGroupings).to.have.length(2);
|
|
|
|
const firstGroup = fieldGroupings[0];
|
|
expect(firstGroup.name).to.equal("Group 2");
|
|
expect(firstGroup.fields).to.have.length(2);
|
|
expect(firstGroup.fields[0].name).to.equal("name");
|
|
expect(firstGroup.fields[1].name).to.equal("formField");
|
|
|
|
const secondGroup = fieldGroupings[1];
|
|
expect(secondGroup.name).to.equal("Group 3");
|
|
expect(secondGroup.fields).to.have.length(1);
|
|
expect(secondGroup.fields[0].name).to.equal("relationships");
|
|
});
|
|
});
|
|
it("getFieldGroupings - show with field groups and limited data in the resource", () => {
|
|
globalConfig.props.resourceConfig.resourceAttrs =
|
|
cy.getResourceAttrsWithGroups();
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getFieldGroupings = baseResource.getFieldGroupings;
|
|
const fieldGroupings = getFieldGroupings("Show", {
|
|
name: "A name value",
|
|
});
|
|
expect(fieldGroupings).to.have.length(1);
|
|
|
|
const firstGroup = fieldGroupings[0];
|
|
expect(firstGroup.name).to.equal("Group 2");
|
|
expect(firstGroup.fields).to.have.length(1);
|
|
expect(firstGroup.fields[0].name).to.equal("name");
|
|
});
|
|
});
|
|
it("getFieldGroupings - show with field groups and fully populated data in the resource", () => {
|
|
globalConfig.props.resourceConfig.resourceAttrs =
|
|
cy.getResourceAttrsWithGroups();
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getFieldGroupings = baseResource.getFieldGroupings;
|
|
const fieldGroupings = getFieldGroupings("Show", {
|
|
name: "A name value",
|
|
showField: "test",
|
|
displayName: "test",
|
|
});
|
|
expect(fieldGroupings).to.have.length(3);
|
|
|
|
const firstGroup = fieldGroupings[0];
|
|
expect(firstGroup.name).to.equal("Group 2");
|
|
expect(firstGroup.fields).to.have.length(1);
|
|
expect(firstGroup.fields[0].name).to.equal("name");
|
|
|
|
const secondGroup = fieldGroupings[1];
|
|
expect(secondGroup.name).to.equal("Group 3");
|
|
expect(secondGroup.fields).to.have.length(2);
|
|
expect(secondGroup.fields[0].name).to.equal("relationships");
|
|
expect(secondGroup.fields[1].name).to.equal("displayName");
|
|
|
|
const thirdGroup = fieldGroupings[2];
|
|
expect(thirdGroup.name).to.equal("Group 1");
|
|
expect(thirdGroup.fields).to.have.length(1);
|
|
expect(thirdGroup.fields[0].name).to.equal("showField");
|
|
});
|
|
});
|
|
it("getResource", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const getResource = baseResource.getResource;
|
|
const apiClient = globalConfig.props.resourceConfig.apiClient;
|
|
const apiSpy = cy.spy(apiClient, "get");
|
|
const componentData = {
|
|
instancedResource: {
|
|
afterResourceFetch: () => {},
|
|
},
|
|
resource: {
|
|
value: {},
|
|
},
|
|
initialized: {
|
|
value: false,
|
|
},
|
|
};
|
|
const resourceFetchSpy = cy.spy(
|
|
componentData.instancedResource,
|
|
"afterResourceFetch"
|
|
);
|
|
|
|
getResource(1, componentData, "Form")
|
|
.then(() => {
|
|
expect(apiSpy).to.have.been.called;
|
|
})
|
|
.then(() => {
|
|
expect(resourceFetchSpy).to.be.calledWith(
|
|
componentData,
|
|
{ id: 1, name: "Object 1" },
|
|
"Form"
|
|
);
|
|
});
|
|
});
|
|
});
|
|
it("resourceNamePlural", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const resourceNamePlural = baseResource.resourceNamePlural;
|
|
expect(resourceNamePlural.value).to.equal("testObjects");
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("useBaseResource - resource creation methods", () => {
|
|
beforeEach(() => {
|
|
globalConfig.props.resourceConfig = cy.getBaseResourceConfig();
|
|
});
|
|
it("additionalFieldsChanged", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const additionalFieldsChanged =
|
|
baseResource.additionalFieldsChanged;
|
|
const resource = {
|
|
extended_attributes: null,
|
|
};
|
|
const additionalFieldValues = "A new value";
|
|
additionalFieldsChanged(additionalFieldValues, resource);
|
|
expect(resource.extended_attributes).to.equal(
|
|
additionalFieldValues
|
|
);
|
|
});
|
|
});
|
|
it("newResource", () => {
|
|
globalConfig.props.resourceConfig.resourceAttrs =
|
|
cy.getResourceAttrsWithNoGroups();
|
|
globalConfig.props.resourceConfig.extendedAttributesResourceType =
|
|
"test";
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const newResource = baseResource.newResource;
|
|
|
|
expect(newResource.value).to.deep.equal({
|
|
id: null,
|
|
name: "",
|
|
relationships: [],
|
|
showField: "",
|
|
formField: "",
|
|
displayName: "",
|
|
select: "",
|
|
textarea: "",
|
|
boolean: false,
|
|
checkbox: false,
|
|
dummyType: null,
|
|
defaultValue: "This is a default value",
|
|
extended_attributes: [],
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("useBaseResource - resource utility methods", () => {
|
|
beforeEach(() => {
|
|
globalConfig.props.resourceConfig = cy.getBaseResourceConfig();
|
|
});
|
|
it("hasAdditionalFields", () => {
|
|
globalConfig.props.resourceConfig.extendedAttributesResourceType =
|
|
"test";
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const hasAdditionalFields = baseResource.hasAdditionalFields;
|
|
expect(hasAdditionalFields.value).to.equal(true);
|
|
});
|
|
});
|
|
it("refreshTemplateState", () => {
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const baseResource = component.result;
|
|
const refreshTemplateState = baseResource.refreshTemplateState;
|
|
const refreshTemplate = baseResource.refreshTemplate;
|
|
expect(refreshTemplate.value).to.equal(0);
|
|
refreshTemplateState();
|
|
expect(refreshTemplate.value).to.equal(1);
|
|
refreshTemplateState();
|
|
expect(refreshTemplate.value).to.equal(2);
|
|
});
|
|
});
|
|
it("populateAttributesWithAuthorisedValues", () => {
|
|
globalConfig.props.resourceConfig.resourceAttrs =
|
|
cy.getResourceAttrsWithNoGroups();
|
|
cy.mount(UseBaseResource, globalConfig).then(({ component }) => {
|
|
const avCatResourceAttr =
|
|
globalConfig.props.resourceConfig.resourceAttrs.find(
|
|
ra => !!ra.avCat
|
|
);
|
|
expect(avCatResourceAttr.options).to.exist;
|
|
expect(Object.keys(avCatResourceAttr.options)).to.have.length(1);
|
|
expect(avCatResourceAttr.options[0].description).to.equal(
|
|
"Test value"
|
|
);
|
|
expect(avCatResourceAttr.options[0].value).to.equal("test_value");
|
|
|
|
const avRelationshipField =
|
|
globalConfig.props.resourceConfig.resourceAttrs
|
|
.find(ra => ra.name === "relationships")
|
|
.relationshipFields.find(rf => !!rf.avCat);
|
|
expect(avRelationshipField.options).to.exist;
|
|
expect(Object.keys(avRelationshipField.options)).to.have.length(1);
|
|
expect(avRelationshipField.options[0].description).to.equal(
|
|
"Test value"
|
|
);
|
|
expect(avRelationshipField.options[0].value).to.equal("test_value");
|
|
});
|
|
});
|
|
});
|