aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/e2e
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2021-12-22 18:02:36 +0100
committerChocobozzz <me@florianbigard.com>2021-12-29 10:10:01 +0100
commit3c065fe3b3e1385d59ad1980251d14b712648155 (patch)
treef5f7f1b428b8155a735014304e2d45b9ed92fe07 /client/e2e
parent61cc1c03bf6f12af7c1b2e2a7d2fdaa563c37b59 (diff)
downloadPeerTube-3c065fe3b3e1385d59ad1980251d14b712648155.tar.gz
PeerTube-3c065fe3b3e1385d59ad1980251d14b712648155.tar.zst
PeerTube-3c065fe3b3e1385d59ad1980251d14b712648155.zip
Enhance plugin video fields
Add video form tab selection Add ability to display an error
Diffstat (limited to 'client/e2e')
-rw-r--r--client/e2e/src/po/admin-plugin.po.ts31
-rw-r--r--client/e2e/src/po/anonymous-settings.po.ts2
-rw-r--r--client/e2e/src/po/my-account.po.ts2
-rw-r--r--client/e2e/src/po/video-upload.po.ts21
-rw-r--r--client/e2e/src/suites-local/plugins.e2e-spec.ts79
-rw-r--r--client/e2e/src/utils/elements.ts2
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 @@
1import { browserSleep, go } from '../utils'
2
3export 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
4export class VideoUploadPage { 4export 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 @@
1import { AdminPluginPage } from '../po/admin-plugin.po'
2import { LoginPage } from '../po/login.po'
3import { VideoUploadPage } from '../po/video-upload.po'
4import { browserSleep, getCheckbox, waitServerUp } from '../utils'
5
6describe('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 @@
1function getCheckbox (name: string) { 1function getCheckbox (name: string) {
2 return $(`my-peertube-checkbox[inputname=${name}] label`) 2 return $(`my-peertube-checkbox input[id=${name}]`).parentElement()
3} 3}
4 4
5async function selectCustomSelect (id: string, valueLabel: string) { 5async function selectCustomSelect (id: string, valueLabel: string) {