Ability for admins to set default upload values

This commit is contained in:
Chocobozzz
2021-12-14 17:17:01 +01:00
parent a6f919e455
commit 3cf68b869d
31 changed files with 467 additions and 89 deletions

View File

@@ -21,6 +21,24 @@ export class VideoWatchPage {
return this.getVideoNameElement().then(e => e.getText())
}
getPrivacy () {
return $('.attribute-privacy .attribute-value').getText()
}
getLicence () {
return $('.attribute-licence .attribute-value').getText()
}
async isDownloadEnabled () {
await this.clickOnMoreDropdownIcon()
return $('.dropdown-item .icon-download').isExisting()
}
areCommentsEnabled () {
return $('my-video-comment-add').isExisting()
}
async goOnAssociatedEmbed () {
let url = await browser.getUrl()
url = url.replace('/w/', '/videos/embed/')
@@ -38,10 +56,8 @@ export class VideoWatchPage {
}
async clickOnUpdate () {
const dropdown = $('my-video-actions-dropdown .action-button')
await dropdown.click()
await this.clickOnMoreDropdownIcon()
await $('.dropdown-menu.show .dropdown-item').waitForDisplayed()
const items = await $$('.dropdown-menu.show .dropdown-item')
for (const item of items) {
@@ -86,6 +102,13 @@ export class VideoWatchPage {
}, { timeout: maxTime })
}
async clickOnMoreDropdownIcon () {
const dropdown = $('my-video-actions-dropdown .action-button')
await dropdown.click()
await $('.dropdown-menu.show .dropdown-item').waitForDisplayed()
}
private async getVideoNameElement () {
// We have 2 video info name block, pick the first that is not empty
const elem = async () => {

View File

@@ -0,0 +1,37 @@
import { LoginPage } from '../po/login.po'
import { VideoUploadPage } from '../po/video-upload.po'
import { VideoWatchPage } from '../po/video-watch.po'
import { isMobileDevice, isSafari, waitServerUp } from '../utils'
describe('Custom server defaults', () => {
let videoUploadPage: VideoUploadPage
let loginPage: LoginPage
let videoWatchPage: VideoWatchPage
before(async () => {
await waitServerUp()
})
beforeEach(async () => {
loginPage = new LoginPage()
videoUploadPage = new VideoUploadPage()
videoWatchPage = new VideoWatchPage(isMobileDevice(), isSafari())
await browser.maximizeWindow()
})
it('Should upload a video with custom default values', async function () {
await loginPage.loginAsRootUser()
await videoUploadPage.navigateTo()
await videoUploadPage.uploadVideo()
await videoUploadPage.validSecondUploadStep('video')
await videoWatchPage.waitWatchVideoName('video')
expect(await videoWatchPage.getPrivacy()).toBe('Internal')
expect(await videoWatchPage.getLicence()).toBe('Attribution - Non Commercial')
expect(await videoWatchPage.isDownloadEnabled()).toBeFalsy()
expect(await videoWatchPage.areCommentsEnabled()).toBeFalsy()
})
})

View File

@@ -4,6 +4,7 @@ import { MyAccountPage } from '../po/my-account'
import { VideoListPage } from '../po/video-list.po'
import { VideoSearchPage } from '../po/video-search.po'
import { VideoUploadPage } from '../po/video-upload.po'
import { VideoWatchPage } from '../po/video-watch.po'
import { NSFWPolicy } from '../types/common'
import { isMobileDevice, isSafari, waitServerUp } from '../utils'
@@ -14,6 +15,7 @@ describe('Videos list', () => {
let loginPage: LoginPage
let myAccountPage: MyAccountPage
let videoSearchPage: VideoSearchPage
let videoWatchPage: VideoWatchPage
const seed = Math.random()
const nsfwVideo = seed + ' - nsfw'
@@ -108,6 +110,7 @@ describe('Videos list', () => {
videoUploadPage = new VideoUploadPage()
myAccountPage = new MyAccountPage()
videoSearchPage = new VideoSearchPage()
videoWatchPage = new VideoWatchPage(isMobileDevice(), isSafari())
await browser.maximizeWindow()
})
@@ -191,5 +194,26 @@ describe('Videos list', () => {
await checkCommonVideoListPages('display')
await checkSearchPage('display')
})
after(async () => {
await loginPage.logout()
})
})
describe('Default upload values', function () {
it('Should have default video values', async function () {
await loginPage.loginAsRootUser()
await videoUploadPage.navigateTo()
await videoUploadPage.uploadVideo()
await videoUploadPage.validSecondUploadStep('video')
await videoWatchPage.waitWatchVideoName('video')
expect(await videoWatchPage.getPrivacy()).toBe('Public')
expect(await videoWatchPage.getLicence()).toBe('Unknown')
expect(await videoWatchPage.isDownloadEnabled()).toBeTruthy()
expect(await videoWatchPage.areCommentsEnabled()).toBeTruthy()
})
})
})

View File

@@ -0,0 +1,64 @@
import { ChildProcessWithoutNullStreams } from 'child_process'
import { basename } from 'path'
import { runCommand, runServer } from './server'
let appInstance: string
let app: ChildProcessWithoutNullStreams
async function beforeLocalSuite (suite: any) {
const config = buildConfig(suite.file)
await runCommand('npm run clean:server:test -- ' + appInstance)
app = runServer(appInstance, config)
}
function afterLocalSuite () {
app.kill()
app = undefined
}
function beforeLocalSession (config: { baseUrl: string }, capabilities: { browserName: string }) {
appInstance = capabilities['browserName'] === 'chrome' ? '1' : '2'
config.baseUrl = 'http://localhost:900' + appInstance
}
async function onBrowserStackPrepare () {
const appInstance = '1'
await runCommand('npm run clean:server:test -- ' + appInstance)
app = runServer(appInstance)
}
function onBrowserStackComplete () {
app.kill()
app = undefined
}
export {
beforeLocalSession,
afterLocalSuite,
beforeLocalSuite,
onBrowserStackPrepare,
onBrowserStackComplete
}
// ---------------------------------------------------------------------------
function buildConfig (suiteFile: string = undefined) {
const filename = basename(suiteFile)
if (filename === 'custom-server-defaults.e2e-spec.ts') {
return {
defaults: {
publish: {
download_enabled: false,
comments_enabled: false,
privacy: 4,
licence: 4
}
}
}
}
return {}
}

View File

@@ -1,3 +1,5 @@
export * from './common'
export * from './elements'
export * from './hooks'
export * from './server'
export * from './urls'

View File

@@ -0,0 +1,63 @@
import { exec, spawn } from 'child_process'
import { join, resolve } from 'path'
function runServer (appInstance: string, config: any = {}) {
const env = Object.create(process.env)
env['NODE_ENV'] = 'test'
env['NODE_APP_INSTANCE'] = appInstance
env['NODE_CONFIG'] = JSON.stringify({
rates_limit: {
api: {
max: 5000
},
login: {
max: 5000
}
},
log: {
level: 'warn'
},
signup: {
enabled: false
},
transcoding: {
enabled: false
},
...config
})
const forkOptions = {
env,
cwd: getRootCWD(),
detached: false
}
const p = spawn('node', [ join('dist', 'server.js') ], forkOptions)
p.stderr.on('data', data => console.error(data.toString()))
p.stdout.on('data', data => console.error(data.toString()))
return p
}
function runCommand (command: string) {
return new Promise<void>((res, rej) => {
const p = exec(command, { cwd: getRootCWD() })
p.stderr.on('data', data => console.error(data.toString()))
p.on('error', err => rej(err))
p.on('exit', () => res())
})
}
export {
runServer,
runCommand
}
// ---------------------------------------------------------------------------
function getRootCWD () {
return resolve('../..')
}

View File

@@ -1,3 +1,4 @@
import { onBrowserStackComplete, onBrowserStackPrepare } from './src/utils'
import { config as mainConfig } from './wdio.main.conf'
const user = process.env.BROWSERSTACK_USER
@@ -114,6 +115,10 @@ module.exports = {
if (capabilities['bstack:options'].realMobile === true) {
capabilities['bstack:options'].local = false
}
}
},
onPrepare: onBrowserStackPrepare,
onComplete: onBrowserStackComplete
} as WebdriverIO.Config
}

View File

@@ -1,3 +1,4 @@
import { afterLocalSuite, beforeLocalSuite, beforeLocalSession } from './src/utils'
import { config as mainConfig } from './wdio.main.conf'
const prefs = {
@@ -21,12 +22,16 @@ module.exports = {
browserName: 'chrome',
acceptInsecureCerts: true,
'goog:chromeOptions': {
args: [ '--headless', '--disable-gpu', '--window-size=1280,1024' ],
args: [ '--disable-gpu', '--window-size=1280,1024' ],
prefs
}
}
],
services: [ 'chromedriver' ]
services: [ 'chromedriver' ],
beforeSession: beforeLocalSession,
beforeSuite: beforeLocalSuite,
afterSuite: afterLocalSuite
} as WebdriverIO.Config
}

View File

@@ -1,3 +1,4 @@
import { afterLocalSuite, beforeLocalSession, beforeLocalSuite } from './src/utils'
import { config as mainConfig } from './wdio.main.conf'
const prefs = {
@@ -11,7 +12,7 @@ module.exports = {
runner: 'local',
maxInstances: 2,
maxInstancesPerCapability: 1,
capabilities: [
{
@@ -34,12 +35,8 @@ module.exports = {
services: [ 'chromedriver', 'geckodriver' ],
beforeSession: function (config, capabilities) {
if (capabilities['browserName'] === 'chrome') {
config.baseUrl = 'http://localhost:9001'
} else {
config.baseUrl = 'http://localhost:9002'
}
}
beforeSession: beforeLocalSession,
beforeSuite: beforeLocalSuite,
afterSuite: afterLocalSuite
} as WebdriverIO.Config
}