-
Notifications
You must be signed in to change notification settings - Fork 42
/
article-helper.js
146 lines (122 loc) · 4.36 KB
/
article-helper.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import { MockArticle, MockUser } from "@times-components/fixture-generator";
const relatedArticleCount = 3;
const articleTemplateTest = template =>
describe(`Article - ${template}`, () => {
let sundayTimesArticleWithThreeRelatedArticles;
let userWithBookmarks;
beforeEach(() => {
sundayTimesArticleWithThreeRelatedArticles = new MockArticle()
.sundayTimes()
.setRelatedArticles(relatedArticleCount)
.setTemplate(template)
.get();
userWithBookmarks = new MockUser().setBookmarksTotal(3);
});
afterEach(() => {
cy.task("stopMockServer");
});
it("loads hi-res images for related articles", () =>
cy
.task("startMockServerWith", {
Article: sundayTimesArticleWithThreeRelatedArticles,
User: userWithBookmarks
})
.visit("/article/8763d1a0-ca57-11e8-bde6-fae32479843d")
.get("#related-articles")
.scrollIntoView()
.then(() => {
// wait for the image to transition and be removed (unfortunately Cypress doesn't auto wait for this)
cy.wait(2000);
cy.get("#related-articles img").as("raImages");
cy.get("@raImages")
.its("length")
.should("eq", relatedArticleCount);
cy.get("@raImages").each(item => {
const url = new URL(item.attr("src"));
const initialResize = "100";
expect(url.searchParams.get("resize")).to.not.equal(initialResize);
});
}));
it("renders via newskit components correctly", () =>
cy
.task("startMockServerWith", {
Article: sundayTimesArticleWithThreeRelatedArticles,
User: userWithBookmarks
})
.visit("/article/8763d1a0-ca57-11e8-bde6-fae32479843d?newskit=1")
.get("[data-cy=topic-tags]")
.scrollIntoView()
.contains("Hello World")
.should("be.visible")
.should("not.be.empty"));
it("loads all the required article ads", () => {
cy.task("startMockServerWith", {
Article: sundayTimesArticleWithThreeRelatedArticles,
User: userWithBookmarks
})
.visit("/article/8763d1a0-ca57-11e8-bde6-fae32479843d")
.wait(2000);
cy.get("#ad-header").should("exist");
cy.get("#ad-article-inline").should("exist");
cy.get("#ad-pixel").should("exist");
cy.get("#ad-pixelteads").should("exist");
cy.get("#ad-pixelskin").should("exist");
});
it("has SpotIM comment tag when article comments are enabled", () => {
const articleWithCommentsEnabled = new MockArticle()
.sundayTimes()
.setCommentsEnabled(true)
.get();
cy.task("startMockServerWith", {
Article: articleWithCommentsEnabled,
User: userWithBookmarks
}).visit("/article/8763d1a0-ca57-11e8-bde6-fae32479843d");
cy.get("script[data-spotim-module]")
.should("have.attr", "src", "https://launcher.spot.im/spot/5p0t_1m_1d")
.should("have.attr", "data-post-id", articleWithCommentsEnabled.id)
.should(
"have.attr",
"data-post-url",
`https://www.thetimes.co.uk/article/${articleWithCommentsEnabled.id}`
);
});
it("does not have SpotIM comment tag when article comments are disabled", () => {
const articleWithCommentsDisabled = new MockArticle()
.sundayTimes()
.setCommentsEnabled(false)
.get();
cy.task("startMockServerWith", {
Article: articleWithCommentsDisabled,
User: userWithBookmarks
}).visit("/article/8763d1a0-ca57-11e8-bde6-fae32479843d");
cy.get("script[data-spotim-module]").should("not.exist");
});
it("should pass basic a11y test", () => {
cy.task("startMockServerWith", {
Article: sundayTimesArticleWithThreeRelatedArticles,
User: userWithBookmarks
})
.visit("/article/8763d1a0-ca57-11e8-bde6-fae32479843d")
.wait(1000)
.injectAxe()
.wait(200)
.configureAxe({
rules: [
{
id: "color-contrast",
enabled: false
},
{
id: "frame-title-unique",
enabled: false
},
{
id: "region",
enabled: false
}
]
})
.checkA11y();
});
});
export default articleTemplateTest;