diff options
Diffstat (limited to 'client/e2e')
-rw-r--r-- | client/e2e/src/po/admin-plugin.po.ts | 31 | ||||
-rw-r--r-- | client/e2e/src/po/anonymous-settings.po.ts | 2 | ||||
-rw-r--r-- | client/e2e/src/po/my-account.po.ts | 2 | ||||
-rw-r--r-- | client/e2e/src/po/video-upload.po.ts | 21 | ||||
-rw-r--r-- | client/e2e/src/suites-local/plugins.e2e-spec.ts | 79 | ||||
-rw-r--r-- | client/e2e/src/utils/elements.ts | 2 |
6 files changed, 128 insertions, 9 deletions
diff --git a/client/e2e/src/po/admin-plugin.po.ts b/client/e2e/src/po/admin-plugin.po.ts new file mode 100644 index 000000000..6a3f3cf28 --- /dev/null +++ b/client/e2e/src/po/admin-plugin.po.ts | |||
@@ -0,0 +1,31 @@ | |||
1 | import { browserSleep, go } from '../utils' | ||
2 | |||
3 | export class AdminPluginPage { | ||
4 | |||
5 | async navigateToSearch () { | ||
6 | await go('/admin/plugins/search') | ||
7 | |||
8 | await $('my-plugin-search').waitForDisplayed() | ||
9 | } | ||
10 | |||
11 | async search (name: string) { | ||
12 | const input = $('.search-bar input') | ||
13 | await input.waitForDisplayed() | ||
14 | await input.clearValue() | ||
15 | await input.setValue(name) | ||
16 | |||
17 | await browserSleep(1000) | ||
18 | } | ||
19 | |||
20 | async installHelloWorld () { | ||
21 | $('.plugin-name=hello-world').waitForDisplayed() | ||
22 | |||
23 | await $('.card-body my-button[icon=cloud-download]').click() | ||
24 | |||
25 | const submitModalButton = $('.modal-content input[type=submit]') | ||
26 | await submitModalButton.waitForClickable() | ||
27 | await submitModalButton.click() | ||
28 | |||
29 | await $('.card-body my-edit-button').waitForDisplayed() | ||
30 | } | ||
31 | } | ||
diff --git a/client/e2e/src/po/anonymous-settings.po.ts b/client/e2e/src/po/anonymous-settings.po.ts index 180d371fa..21216a8f2 100644 --- a/client/e2e/src/po/anonymous-settings.po.ts +++ b/client/e2e/src/po/anonymous-settings.po.ts | |||
@@ -13,7 +13,7 @@ export class AnonymousSettingsPage { | |||
13 | } | 13 | } |
14 | 14 | ||
15 | async clickOnP2PCheckbox () { | 15 | async clickOnP2PCheckbox () { |
16 | const p2p = getCheckbox('p2pEnabled') | 16 | const p2p = await getCheckbox('p2pEnabled') |
17 | await p2p.waitForClickable() | 17 | await p2p.waitForClickable() |
18 | 18 | ||
19 | await p2p.click() | 19 | await p2p.click() |
diff --git a/client/e2e/src/po/my-account.po.ts b/client/e2e/src/po/my-account.po.ts index 13a764e87..20dafbf06 100644 --- a/client/e2e/src/po/my-account.po.ts +++ b/client/e2e/src/po/my-account.po.ts | |||
@@ -31,7 +31,7 @@ export class MyAccountPage { | |||
31 | } | 31 | } |
32 | 32 | ||
33 | async clickOnP2PCheckbox () { | 33 | async clickOnP2PCheckbox () { |
34 | const p2p = getCheckbox('p2pEnabled') | 34 | const p2p = await getCheckbox('p2pEnabled') |
35 | 35 | ||
36 | await p2p.waitForClickable() | 36 | await p2p.waitForClickable() |
37 | await p2p.scrollIntoView(false) // Avoid issues with fixed header on firefox | 37 | await p2p.scrollIntoView(false) // Avoid issues with fixed header on firefox |
diff --git a/client/e2e/src/po/video-upload.po.ts b/client/e2e/src/po/video-upload.po.ts index 2206b56c3..38395ea2f 100644 --- a/client/e2e/src/po/video-upload.po.ts +++ b/client/e2e/src/po/video-upload.po.ts | |||
@@ -3,7 +3,10 @@ import { getCheckbox, selectCustomSelect } from '../utils' | |||
3 | 3 | ||
4 | export class VideoUploadPage { | 4 | export class VideoUploadPage { |
5 | async navigateTo () { | 5 | async navigateTo () { |
6 | await $('.header .publish-button').click() | 6 | const publishButton = await $('.header .publish-button') |
7 | |||
8 | await publishButton.waitForClickable() | ||
9 | await publishButton.click() | ||
7 | 10 | ||
8 | await $('.upload-video-container').waitForDisplayed() | 11 | await $('.upload-video-container').waitForDisplayed() |
9 | } | 12 | } |
@@ -24,15 +27,17 @@ export class VideoUploadPage { | |||
24 | 27 | ||
25 | // Wait for the upload to finish | 28 | // Wait for the upload to finish |
26 | await browser.waitUntil(async () => { | 29 | await browser.waitUntil(async () => { |
27 | const actionButton = this.getSecondStepSubmitButton().$('.action-button') | 30 | const warning = await $('=Publish will be available when upload is finished').isDisplayed() |
31 | const progress = await $('.progress-bar=100%').isDisplayed() | ||
28 | 32 | ||
29 | const klass = await actionButton.getAttribute('class') | 33 | return !warning && progress |
30 | return !klass.includes('disabled') | ||
31 | }) | 34 | }) |
32 | } | 35 | } |
33 | 36 | ||
34 | setAsNSFW () { | 37 | async setAsNSFW () { |
35 | return getCheckbox('nsfw').click() | 38 | const checkbox = await getCheckbox('nsfw') |
39 | |||
40 | return checkbox.click() | ||
36 | } | 41 | } |
37 | 42 | ||
38 | async validSecondUploadStep (videoName: string) { | 43 | async validSecondUploadStep (videoName: string) { |
@@ -51,6 +56,10 @@ export class VideoUploadPage { | |||
51 | return selectCustomSelect('privacy', 'Public') | 56 | return selectCustomSelect('privacy', 'Public') |
52 | } | 57 | } |
53 | 58 | ||
59 | setAsPrivate () { | ||
60 | return selectCustomSelect('privacy', 'Private') | ||
61 | } | ||
62 | |||
54 | private getSecondStepSubmitButton () { | 63 | private getSecondStepSubmitButton () { |
55 | return $('.submit-container my-button') | 64 | return $('.submit-container my-button') |
56 | } | 65 | } |
diff --git a/client/e2e/src/suites-local/plugins.e2e-spec.ts b/client/e2e/src/suites-local/plugins.e2e-spec.ts new file mode 100644 index 000000000..14802c1ca --- /dev/null +++ b/client/e2e/src/suites-local/plugins.e2e-spec.ts | |||
@@ -0,0 +1,79 @@ | |||
1 | import { AdminPluginPage } from '../po/admin-plugin.po' | ||
2 | import { LoginPage } from '../po/login.po' | ||
3 | import { VideoUploadPage } from '../po/video-upload.po' | ||
4 | import { browserSleep, getCheckbox, waitServerUp } from '../utils' | ||
5 | |||
6 | describe('Plugins', () => { | ||
7 | let videoUploadPage: VideoUploadPage | ||
8 | let loginPage: LoginPage | ||
9 | let adminPluginPage: AdminPluginPage | ||
10 | |||
11 | function getPluginCheckbox () { | ||
12 | return getCheckbox('hello-world-field-4') | ||
13 | } | ||
14 | |||
15 | async function expectSubmitState ({ disabled }: { disabled: boolean }) { | ||
16 | const disabledSubmit = await $('my-button .disabled') | ||
17 | |||
18 | if (disabled) expect(await disabledSubmit.isDisplayed()).toBeTruthy() | ||
19 | else expect(await disabledSubmit.isDisplayed()).toBeFalsy() | ||
20 | } | ||
21 | |||
22 | before(async () => { | ||
23 | await waitServerUp() | ||
24 | }) | ||
25 | |||
26 | beforeEach(async () => { | ||
27 | loginPage = new LoginPage() | ||
28 | videoUploadPage = new VideoUploadPage() | ||
29 | adminPluginPage = new AdminPluginPage() | ||
30 | |||
31 | await browser.maximizeWindow() | ||
32 | }) | ||
33 | |||
34 | it('Should install hello world plugin', async () => { | ||
35 | await loginPage.loginAsRootUser() | ||
36 | |||
37 | await adminPluginPage.navigateToSearch() | ||
38 | await adminPluginPage.search('hello-world') | ||
39 | await adminPluginPage.installHelloWorld() | ||
40 | await browser.refresh() | ||
41 | }) | ||
42 | |||
43 | it('Should have checkbox in video edit page', async () => { | ||
44 | await videoUploadPage.navigateTo() | ||
45 | await videoUploadPage.uploadVideo() | ||
46 | |||
47 | await $('span=Super field 4 in main tab').waitForDisplayed() | ||
48 | |||
49 | const checkbox = await getPluginCheckbox() | ||
50 | expect(await checkbox.isDisplayed()).toBeTruthy() | ||
51 | |||
52 | await expectSubmitState({ disabled: true }) | ||
53 | }) | ||
54 | |||
55 | it('Should check the checkbox and be able to submit the video', async function () { | ||
56 | const checkbox = await getPluginCheckbox() | ||
57 | await checkbox.click() | ||
58 | |||
59 | await expectSubmitState({ disabled: false }) | ||
60 | }) | ||
61 | |||
62 | it('Should uncheck the checkbox and not be able to submit the video', async function () { | ||
63 | const checkbox = await getPluginCheckbox() | ||
64 | await checkbox.click() | ||
65 | |||
66 | await browserSleep(5000) | ||
67 | |||
68 | await expectSubmitState({ disabled: true }) | ||
69 | |||
70 | const error = await $('.form-error*=Should be enabled') | ||
71 | expect(await error.isDisplayed()).toBeTruthy() | ||
72 | }) | ||
73 | |||
74 | it('Should change the privacy and should hide the checkbox', async function () { | ||
75 | await videoUploadPage.setAsPrivate() | ||
76 | |||
77 | await expectSubmitState({ disabled: false }) | ||
78 | }) | ||
79 | }) | ||
diff --git a/client/e2e/src/utils/elements.ts b/client/e2e/src/utils/elements.ts index 315718879..3ffa5defd 100644 --- a/client/e2e/src/utils/elements.ts +++ b/client/e2e/src/utils/elements.ts | |||
@@ -1,5 +1,5 @@ | |||
1 | function getCheckbox (name: string) { | 1 | function getCheckbox (name: string) { |
2 | return $(`my-peertube-checkbox[inputname=${name}] label`) | 2 | return $(`my-peertube-checkbox input[id=${name}]`).parentElement() |
3 | } | 3 | } |
4 | 4 | ||
5 | async function selectCustomSelect (id: string, valueLabel: string) { | 5 | async function selectCustomSelect (id: string, valueLabel: string) { |