Skip to content
This repository was archived by the owner on Feb 5, 2022. It is now read-only.

Commit 4cb531a

Browse files
authored
Merge pull request #514 from openforge/staging
Push 2.5.2 Live
2 parents 615219b + 55eaa3b commit 4cb531a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+5392
-1357
lines changed

.eslintrc.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"parserOptions": {
3+
"ecmaVersion": 6,
4+
"sourceType": "module",
5+
"ecmaFeatures": {
6+
"jsx": true
7+
}
8+
},
9+
"rules": {
10+
"semi": "error"
11+
}
12+
}

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ UserInterfaceState.xcuserstate
2727
linters/sass-lint.html
2828
src/pages/app-blog-post/prerender-blog-data.ts
2929
src/butter-api/butter-api-key.js
30-
src/components.d.ts
30+
cypress/screenshots
31+
cypress/videos

README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,38 @@ If manual deployment is needed, use the following. Only do this on the develop b
153153

154154
The featured post is managed in the ButterCMS portal. To make a post featured, it must be given a tag of 'featured'. The actual featured post will be the most recently published post with the featured tag. Currently, this post will also appear in the regular list of posts.
155155

156+
## Cypress Integration
157+
158+
This project uses Cypress for front end testing.
159+
160+
It is neccesary to install Cypress for test writing
161+
```
162+
npm install cypress --save-dev
163+
```
164+
This will install Cypress locally as a dev dependency
165+
166+
### Opening Cypress
167+
168+
To launch Cypress Test Runner, the next command is needed
169+
```
170+
npx cypress open
171+
```
172+
### Github Integration
173+
174+
Cypress provides a Dashboard, it is neccesary for the integration.
175+
176+
1.- Go to organization switcher and choose your organization.
177+
178+
2.- Click on the project you wish to integrate
179+
180+
3.- Go to project settings
181+
182+
4.- Click install Cypress Github app
183+
184+
5.- Select repositary you wish to integrate
185+
186+
6.- Done
187+
156188

157189
## Deployment
158190
```

cypress/fixtures/dummyPDF.pdf

7.3 KB
Binary file not shown.
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
describe("SLA", function () {
2+
var env = 'http://localhost:3333';
3+
beforeEach(() => {
4+
cy.visit(env + '/service-level-agreement');
5+
});
6+
7+
describe('Hero SLA', () => {
8+
it('User is able to view the SLA hero content', () => {
9+
cy.get('.hero-content > h2').contains('Service Level Agreement');
10+
cy.get('.hero-content > p').contains("Below you can read the contents of our SLA. We welcome questions, so if you have any, don't hesitate to contact us at hello@openforge.io!");
11+
cy.get('.btn').should('exist').and('be.visible');
12+
});
13+
14+
it('User is able to scroll to content via "Learn More"', () => {
15+
cy.get('.btn').click();
16+
cy.get('#sla').should('be.visible');
17+
});
18+
19+
});
20+
describe('SLA Table', () => {
21+
it('User is able to view the Area, Action, and Detail columns', () => {
22+
cy.get('#sla').scrollIntoView();
23+
cy.get('.sla-headers > :nth-child(1)').should('be.visible');
24+
cy.get('.sla-headers > :nth-child(2)').should('be.visible');
25+
cy.get('.sla-headers > :nth-child(3)').should('be.visible');
26+
});
27+
28+
it('User is able to see the Client Service Row', () => {
29+
cy.get('.sla-headers > :nth-child(1)').scrollIntoView();
30+
cy.get('#sla > :nth-child(3) > :nth-child(1)').contains('Client Service');
31+
cy.get('#sla > :nth-child(3) > :nth-child(2)').contains('Client Management');
32+
cy.get(':nth-child(3) > .sla-detail > ul').contains('Meeting minutes will be used within 24 hours of meeting');
33+
cy.get(':nth-child(3) > .sla-detail > ul').contains('A weekly status report will be provided on actively scheduled projects/multiple project accounts');
34+
cy.get(':nth-child(3) > .sla-detail > ul').contains('All Teamwork messages will be responded to within 6 - 24 hours, depending on the priority of the message');
35+
cy.get(':nth-child(3) > .sla-detail > ul').contains('Clients will be kept up to date on relevant information of project deliverables, including milestones and risks');
36+
cy.get(':nth-child(3) > .sla-detail > ul').contains('A quarterly review meeting will be scheduled with Client and Client Management team to review overall project and roadmap');
37+
cy.get(':nth-child(3) > .sla-detail > ul').contains('Handover notes and replacement agency contact will be provided in the case of a switch in provider');
38+
});
39+
40+
it('User is able to see the Creative row', () => {
41+
cy.get('#sla > :nth-child(5) > :nth-child(1)').scrollIntoView();
42+
cy.get('#sla > :nth-child(5) > :nth-child(1)').contains('Creative');
43+
cy.get(':nth-child(5) > :nth-child(2)').contains('Concept');
44+
cy.get(':nth-child(5) > .sla-detail > ul').contains('Concepts will be presented and supported with a strategic and creative rationale');
45+
cy.get(':nth-child(5) > .sla-detail > ul').contains('Recommendation provided; if requested Creative execution will be adhere to client brand and guidelines where available and appropriate');
46+
cy.get(':nth-child(5) > .sla-detail > ul').contains('Creative team will attend presentation where feasible or necessary');
47+
});
48+
49+
it('User is able to see the Project Management Row', () => {
50+
cy.get('#sla > :nth-child(7) > :nth-child(1)').scrollIntoView();
51+
cy.get('#sla > :nth-child(7) > :nth-child(1)').contains('Project Management');
52+
cy.get(':nth-child(7) > :nth-child(2)').contains('Planning & Scheduling');
53+
cy.get(':nth-child(7) > .sla-detail > ul').contains("A roadmap of major milestone & feature completions will be provided via Teamwork's Milestone functionality Milestones will be updated and reviewed when necessary");
54+
cy.get(':nth-child(7) > .sla-detail > ul').contains("Project and production timing plans will be adhered to and in the event of milestones being missed, a revised timing plan will be provided");
55+
cy.get(':nth-child(7) > .sla-detail > ul').contains("Any changes to ultimate delivery will be discussed and agreed with the Client");
56+
cy.get(':nth-child(7) > .sla-detail > ul').contains("Openforge will always aim to meet the original deadline");
57+
cy.get(':nth-child(7) > .sla-detail > ul').contains("Where this is not possible, potential alternative will be provided");
58+
});
59+
60+
it('User is able to see the Production row', () => {
61+
cy.get(':nth-child(9) > :nth-child(1)').scrollIntoView();
62+
cy.get(':nth-child(9) > :nth-child(1)').contains('Production');
63+
cy.get(':nth-child(9) > :nth-child(2)').contains('Costs');
64+
cy.get(':nth-child(9) > .sla-detail > ul').contains("A cost estimate of Creative work will be presented and agreed to by Client before work is started");
65+
cy.get(':nth-child(9) > .sla-detail > ul').contains("Cost Estimate will be based on approved project brief from client");
66+
cy.get(':nth-child(9) > .sla-detail > ul').contains("Production cost estimates can be obtained from eternal suppliers on behalf of client");
67+
cy.get(':nth-child(9) > .sla-detail > ul').contains("A cost estimate of Development work will be presented once Creative work (Design) and Architecture Discovery is completed");
68+
cy.get(':nth-child(9) > .sla-detail > ul').contains("Any estimates provided before Opeforge's discovery & design process are complete are only estimates, and can not be guaranteed by threshold pricing policy");
69+
cy.get(':nth-child(9) > .sla-detail > ul').contains("Openforge will proceed with the relevant action following written approval of costs through Teamwork");
70+
cy.get(':nth-child(9) > .sla-detail > ul').contains("A concept will be delivered on budget. In the event of a concept being over budget, or at risk of going over budget, an alternative on-budget alternative solution will be provided");
71+
cy.get(':nth-child(9) > .sla-detail > ul').contains("If a concept is delivered over budget due to a change in requirements or a dependency on a 3rd party provider, regular pricing applies. If a concept is delivered over budget for any other reason, threshold pricing will apply");
72+
});
73+
74+
it('User is able to see the Finance row', () => {
75+
cy.get(':nth-child(11) > :nth-child(1)').scrollIntoView();
76+
cy.get(':nth-child(11) > :nth-child(1)').contains('Finance');
77+
cy.get(':nth-child(11) > :nth-child(2)').contains('Billing');
78+
cy.get(':nth-child(11) > .sla-detail > ul').contains("Any changes to costs will be discussed with the client and documented via Teamwork");
79+
cy.get(':nth-child(11) > .sla-detail > ul').contains('All work is scheduled in advance with prepaid retainers, also known as a "top-up" model');
80+
cy.get(':nth-child(11) > .sla-detail > ul').contains("Only after payment of hours will client work be scheduled");
81+
cy.get(':nth-child(11) > .sla-detail > ul').contains("Client automatically approves any hours spent responding to questions or high priority tickets");
82+
});
83+
});
84+
describe('Footer', function () {
85+
it('User is able to go to the top of the page via "Back to Top"', () => {
86+
cy.get('.top-link').click();
87+
cy.get('.hero').should('be.visible');
88+
});
89+
90+
it('The footer is visible on the SLA page', () => {
91+
cy.get('.footer').scrollIntoView();
92+
cy.get('.footer').should('be.visible');
93+
});
94+
});
95+
});

0 commit comments

Comments
 (0)