mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-15 17:56:17 +01:00
160 lines
5.1 KiB
JavaScript
160 lines
5.1 KiB
JavaScript
/*
|
|
* MIT License
|
|
*
|
|
* Copyright (c) 2020-present Cloudogu GmbH and Contributors
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in all
|
|
* copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
* SOFTWARE.
|
|
*/
|
|
/// <reference types="cypress" />
|
|
|
|
context('Utilities', () => {
|
|
beforeEach(() => {
|
|
cy.visit('https://example.cypress.io/utilities')
|
|
})
|
|
|
|
it('Cypress._ - call a lodash method', () => {
|
|
// https://on.cypress.io/_
|
|
cy.request('https://jsonplaceholder.cypress.io/users')
|
|
.then((response) => {
|
|
let ids = Cypress._.chain(response.body).map('id').take(3).value()
|
|
|
|
expect(ids).to.deep.eq([1, 2, 3])
|
|
})
|
|
})
|
|
|
|
it('Cypress.$ - call a jQuery method', () => {
|
|
// https://on.cypress.io/$
|
|
let $li = Cypress.$('.utility-jquery li:first')
|
|
|
|
cy.wrap($li)
|
|
.should('not.have.class', 'active')
|
|
.click()
|
|
.should('have.class', 'active')
|
|
})
|
|
|
|
it('Cypress.Blob - blob utilities and base64 string conversion', () => {
|
|
// https://on.cypress.io/blob
|
|
cy.get('.utility-blob').then(($div) => {
|
|
// https://github.com/nolanlawson/blob-util#imgSrcToDataURL
|
|
// get the dataUrl string for the javascript-logo
|
|
return Cypress.Blob.imgSrcToDataURL('https://example.cypress.io/assets/img/javascript-logo.png', undefined, 'anonymous')
|
|
.then((dataUrl) => {
|
|
// create an <img> element and set its src to the dataUrl
|
|
let img = Cypress.$('<img />', { src: dataUrl })
|
|
|
|
// need to explicitly return cy here since we are initially returning
|
|
// the Cypress.Blob.imgSrcToDataURL promise to our test
|
|
// append the image
|
|
$div.append(img)
|
|
|
|
cy.get('.utility-blob img').click()
|
|
.should('have.attr', 'src', dataUrl)
|
|
})
|
|
})
|
|
})
|
|
|
|
it('Cypress.minimatch - test out glob patterns against strings', () => {
|
|
// https://on.cypress.io/minimatch
|
|
let matching = Cypress.minimatch('/users/1/comments', '/users/*/comments', {
|
|
matchBase: true,
|
|
})
|
|
|
|
expect(matching, 'matching wildcard').to.be.true
|
|
|
|
matching = Cypress.minimatch('/users/1/comments/2', '/users/*/comments', {
|
|
matchBase: true,
|
|
})
|
|
|
|
expect(matching, 'comments').to.be.false
|
|
|
|
// ** matches against all downstream path segments
|
|
matching = Cypress.minimatch('/foo/bar/baz/123/quux?a=b&c=2', '/foo/**', {
|
|
matchBase: true,
|
|
})
|
|
|
|
expect(matching, 'comments').to.be.true
|
|
|
|
// whereas * matches only the next path segment
|
|
|
|
matching = Cypress.minimatch('/foo/bar/baz/123/quux?a=b&c=2', '/foo/*', {
|
|
matchBase: false,
|
|
})
|
|
|
|
expect(matching, 'comments').to.be.false
|
|
})
|
|
|
|
it('Cypress.moment() - format or parse dates using a moment method', () => {
|
|
// https://on.cypress.io/moment
|
|
const time = Cypress.moment('2014-04-25T19:38:53.196Z').utc().format('h:mm A')
|
|
|
|
expect(time).to.be.a('string')
|
|
|
|
cy.get('.utility-moment').contains('3:38 PM')
|
|
.should('have.class', 'badge')
|
|
|
|
// the time in the element should be between 3pm and 5pm
|
|
const start = Cypress.moment('3:00 PM', 'LT')
|
|
const end = Cypress.moment('5:00 PM', 'LT')
|
|
|
|
cy.get('.utility-moment .badge')
|
|
.should(($el) => {
|
|
// parse American time like "3:38 PM"
|
|
const m = Cypress.moment($el.text().trim(), 'LT')
|
|
|
|
// display hours + minutes + AM|PM
|
|
const f = 'h:mm A'
|
|
|
|
expect(m.isBetween(start, end),
|
|
`${m.format(f)} should be between ${start.format(f)} and ${end.format(f)}`).to.be.true
|
|
})
|
|
})
|
|
|
|
it('Cypress.Promise - instantiate a bluebird promise', () => {
|
|
// https://on.cypress.io/promise
|
|
let waited = false
|
|
|
|
/**
|
|
* @return Bluebird<string>
|
|
*/
|
|
function waitOneSecond () {
|
|
// return a promise that resolves after 1 second
|
|
// @ts-ignore TS2351 (new Cypress.Promise)
|
|
return new Cypress.Promise((resolve, reject) => {
|
|
setTimeout(() => {
|
|
// set waited to true
|
|
waited = true
|
|
|
|
// resolve with 'foo' string
|
|
resolve('foo')
|
|
}, 1000)
|
|
})
|
|
}
|
|
|
|
cy.then(() => {
|
|
// return a promise to cy.then() that
|
|
// is awaited until it resolves
|
|
// @ts-ignore TS7006
|
|
return waitOneSecond().then((str) => {
|
|
expect(str).to.eq('foo')
|
|
expect(waited).to.be.true
|
|
})
|
|
})
|
|
})
|
|
})
|