Skip to content

Commit 187cac4

Browse files
authored
Add package tests (#11824)
1 parent 642c216 commit 187cac4

File tree

6 files changed

+184
-6
lines changed

6 files changed

+184
-6
lines changed
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
/// <reference types="Cypress" />
2+
import {
3+
ContentBuilder,
4+
DocumentTypeBuilder
5+
} from 'umbraco-cypress-testhelpers';
6+
7+
context('Packages', () => {
8+
const packageName = "TestPackage";
9+
const rootDocTypeName = "Test document type";
10+
const nodeName = "1) Home";
11+
12+
beforeEach(() => {
13+
cy.umbracoLogin(Cypress.env('username'), Cypress.env('password'), false);
14+
});
15+
16+
function CreatePackage(contentId){
17+
const newPackage = {
18+
id: 0,
19+
packageGuid: "00000000-0000-0000-0000-000000000000",
20+
name: "TestPackage",
21+
packagePath: "",
22+
contentLoadChildNodes: false,
23+
contentNodeId: contentId,
24+
macros: [],
25+
languages: [],
26+
dictionaryItems: [],
27+
templates: [],
28+
partialViews: [],
29+
documentTypes: [],
30+
mediaTypes: [],
31+
stylesheets: [],
32+
scripts: [],
33+
dataTypes: [],
34+
mediaUdis: [],
35+
mediaLoadChildNodes: false
36+
}
37+
const url = "https://localhost:44331/umbraco/backoffice/umbracoapi/package/PostSavePackage";
38+
cy.umbracoApiRequest(url, 'POST', newPackage);
39+
}
40+
41+
function CreateSimplePackage(){
42+
43+
const rootDocType = new DocumentTypeBuilder()
44+
.withName(rootDocTypeName)
45+
.withAllowAsRoot(true)
46+
.build();
47+
48+
cy.saveDocumentType(rootDocType).then((generatedRootDocType) => {
49+
const rootDocTypeAlias = generatedRootDocType["alias"];
50+
51+
const rootContentNode = new ContentBuilder()
52+
.withContentTypeAlias(rootDocTypeAlias)
53+
.withAction("saveNew")
54+
.addVariant()
55+
.withName(nodeName)
56+
.withSave(true)
57+
.done()
58+
.build();
59+
cy.saveContent(rootContentNode).then((generatedContent) => {
60+
CreatePackage(generatedContent.Id);
61+
});
62+
});
63+
}
64+
65+
it('Creates a simple package', () => {
66+
67+
cy.umbracoEnsurePackageNameNotExists(packageName);
68+
cy.deleteAllContent();
69+
cy.umbracoEnsureDocumentTypeNameNotExists(rootDocTypeName);
70+
71+
const rootDocType = new DocumentTypeBuilder()
72+
.withName(rootDocTypeName)
73+
.withAllowAsRoot(true)
74+
.build();
75+
76+
cy.saveDocumentType(rootDocType).then((generatedRootDocType) => {
77+
const rootDocTypeAlias = generatedRootDocType["alias"];
78+
79+
const rootContentNode = new ContentBuilder()
80+
.withContentTypeAlias(rootDocTypeAlias)
81+
.withAction("saveNew")
82+
.addVariant()
83+
.withName(nodeName)
84+
.withSave(true)
85+
.done()
86+
.build();
87+
cy.saveContent(rootContentNode);
88+
});
89+
90+
// Navigate to create package section
91+
cy.umbracoSection('packages');
92+
cy.contains('Created').click();
93+
cy.contains('Create package').click();
94+
95+
// Fill out package creation form
96+
cy.get('#headerName').should('be.visible');
97+
cy.wait(1000);
98+
cy.get('#headerName').type(packageName);
99+
cy.get('.controls > .umb-node-preview-add').click();
100+
cy.get('.umb-tree-item__label').first().click();
101+
cy.contains('Create').click();
102+
103+
// Navigate pack to packages and Assert the file is created
104+
cy.umbracoSection('packages');
105+
cy.contains('Created').click();
106+
cy.contains(packageName).should('be.visible');
107+
108+
// Cleanup
109+
cy.umbracoEnsurePackageNameNotExists(packageName);
110+
cy.deleteAllContent();
111+
cy.umbracoEnsureDocumentTypeNameNotExists(rootDocTypeName);
112+
});
113+
114+
it('Delete package', () => {
115+
116+
// Ensure cleanup before test
117+
cy.deleteAllContent();
118+
cy.umbracoEnsureDocumentTypeNameNotExists(rootDocTypeName);
119+
cy.umbracoEnsurePackageNameNotExists(packageName);
120+
121+
CreateSimplePackage();
122+
123+
// Navigate to create package section
124+
cy.umbracoSection('packages');
125+
cy.contains('Created').click();
126+
cy.contains('Delete').click();
127+
cy.contains('Yes, delete').click();
128+
129+
// Assert
130+
cy.contains('TestPackage').should('not.exist');
131+
132+
// Cleanup
133+
cy.deleteAllContent();
134+
cy.umbracoEnsureDocumentTypeNameNotExists(rootDocTypeName);
135+
cy.umbracoEnsurePackageNameNotExists(packageName);
136+
});
137+
138+
it('Download package', () => {
139+
140+
// Ensure cleanup before test
141+
cy.deleteAllContent();
142+
cy.umbracoEnsureDocumentTypeNameNotExists(rootDocTypeName);
143+
cy.umbracoEnsurePackageNameNotExists(packageName);
144+
145+
CreateSimplePackage();
146+
147+
// Navigate to package and download
148+
cy.umbracoSection('packages');
149+
cy.contains('Created').click();
150+
cy.contains('TestPackage').click();
151+
cy.contains('Download').click();
152+
153+
// Assert
154+
cy.verifyDownload('package.xml');
155+
156+
// Cleanup
157+
cy.deleteAllContent();
158+
cy.umbracoEnsureDocumentTypeNameNotExists(rootDocTypeName);
159+
cy.umbracoEnsurePackageNameNotExists(packageName);
160+
});
161+
});

tests/Umbraco.Tests.AcceptanceTest/cypress/plugins/index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// This function is called when a project is opened or re-opened (e.g. due to
1313
// the project's config changing)
1414
const del = require('del')
15+
const { isFileExist } = require('cy-verify-downloads');
1516

1617
/**
1718
* @type {Cypress.PluginConfig}
@@ -25,6 +26,7 @@ module.exports = (on, config) => {
2526
config.baseUrl = baseUrl;
2627
}
2728

29+
on('task', { isFileExist })
2830
on('after:spec', (spec, results) => {
2931
if(results.stats.failures === 0 && results.video) {
3032
// `del()` returns a promise, so it's important to return it to ensure
@@ -33,5 +35,11 @@ module.exports = (on, config) => {
3335
}
3436
})
3537

38+
39+
on('task', {
40+
isFileExist
41+
});
42+
43+
3644
return config;
37-
}
45+
}

tests/Umbraco.Tests.AcceptanceTest/cypress/support/commands.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import {Command} from 'umbraco-cypress-testhelpers';
2828
import {Chainable} from './chainable';
2929
import { JsonHelper } from 'umbraco-cypress-testhelpers';
30+
require('cy-verify-downloads').addCustomCommand();
3031
new Chainable();
3132
new Command().registerCypressCommands();
3233

tests/Umbraco.Tests.AcceptanceTest/package-lock.json

Lines changed: 9 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/Umbraco.Tests.AcceptanceTest/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@
1010
"devDependencies": {
1111
"cross-env": "^7.0.2",
1212
"cypress": "8.4.1",
13+
"cy-verify-downloads": "0.0.5",
1314
"del": "^6.0.0",
1415
"ncp": "^2.0.0",
1516
"prompt": "^1.2.0",
16-
"umbraco-cypress-testhelpers": "^1.0.0-beta-62"
17+
"umbraco-cypress-testhelpers": "^1.0.0-beta-63"
1718
},
1819
"dependencies": {
1920
"typescript": "^3.9.2"

tests/Umbraco.Tests.AcceptanceTest/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
"target": "es5",
1515

1616
"types": [
17-
"cypress"
17+
"cypress",
18+
"cy-verify-downloads"
1819
],
1920
"lib": [
2021
"es5",

0 commit comments

Comments
 (0)