ci: merge main to release
ci: merge main to release
This commit is contained in:
commit
bb2e78028c
13
.github/workflows/tests.yml
vendored
13
.github/workflows/tests.yml
vendored
|
@ -45,12 +45,19 @@ jobs:
|
|||
echo "Running tests..."
|
||||
if [[ "x${{ github.event.inputs.ignoreLowerCoverage }}" == "xtrue" ]]; then
|
||||
echo "Lower coverage failures will be ignored."
|
||||
./ietf/manage.py test -v2 --validate-html-harder --settings=settings_test --ignore-lower-coverage
|
||||
HOME=/root ./ietf/manage.py test -v2 --validate-html-harder --settings=settings_test --ignore-lower-coverage
|
||||
else
|
||||
./ietf/manage.py test -v2 --validate-html-harder --settings=settings_test
|
||||
HOME=/root ./ietf/manage.py test -v2 --validate-html-harder --settings=settings_test
|
||||
fi
|
||||
coverage xml
|
||||
|
||||
- name: Upload geckodriver.log
|
||||
uses: actions/upload-artifact@v3
|
||||
if: ${{ failure() }}
|
||||
with:
|
||||
name: geckodriverlog
|
||||
path: geckodriver.log
|
||||
|
||||
- name: Upload Coverage Results to Codecov
|
||||
uses: codecov/codecov-action@v3.1.4
|
||||
with:
|
||||
|
@ -161,4 +168,4 @@ jobs:
|
|||
with:
|
||||
name: playwright-legacy-results-${{ matrix.project }}
|
||||
path: playwright/test-results/
|
||||
if-no-files-found: ignore
|
||||
if-no-files-found: ignore
|
||||
|
|
|
@ -1,12 +1,19 @@
|
|||
<template lang="pug">
|
||||
.agenda-mobile-bar(v-if='siteStore.viewport < 990')
|
||||
n-dropdown(
|
||||
:options='jumpToDayOptions'
|
||||
size='huge'
|
||||
:show-arrow='true'
|
||||
trigger='click'
|
||||
@select='jumpToDay'
|
||||
)
|
||||
button
|
||||
i.bi.bi-arrow-down-circle
|
||||
button(@click='agendaStore.$patch({ filterShown: true })')
|
||||
i.bi.bi-filter-square-fill.me-2
|
||||
span Filters
|
||||
i.bi.bi-funnel
|
||||
n-badge.ms-2(:value='agendaStore.selectedCatSubs.length', processing)
|
||||
button(@click='agendaStore.$patch({ calendarShown: true })')
|
||||
i.bi.bi-calendar3.me-2
|
||||
span Cal
|
||||
i.bi.bi-calendar3
|
||||
n-dropdown(
|
||||
:options='downloadIcsOptions'
|
||||
size='huge'
|
||||
|
@ -15,14 +22,13 @@
|
|||
@select='downloadIcs'
|
||||
)
|
||||
button
|
||||
i.bi.bi-calendar-check.me-2
|
||||
span .ics
|
||||
i.bi.bi-download
|
||||
button(@click='agendaStore.$patch({ settingsShown: !agendaStore.settingsShown })')
|
||||
i.bi.bi-gear
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { h } from 'vue'
|
||||
import { computed, h } from 'vue'
|
||||
|
||||
import {
|
||||
NBadge,
|
||||
|
@ -43,13 +49,34 @@ const message = useMessage()
|
|||
const agendaStore = useAgendaStore()
|
||||
const siteStore = useSiteStore()
|
||||
|
||||
// Meeting Days
|
||||
|
||||
const jumpToDayOptions = computed(() => {
|
||||
const days = []
|
||||
if (agendaStore.isMeetingLive) {
|
||||
days.push({
|
||||
label: 'Jump to Now',
|
||||
key: 'now',
|
||||
icon: () => h('i', { class: 'bi bi-arrow-down-right-square text-red' })
|
||||
})
|
||||
}
|
||||
for (const day of agendaStore.meetingDays) {
|
||||
days.push({
|
||||
label: `Jump to ${day.label}`,
|
||||
key: day.slug,
|
||||
icon: () => h('i', { class: 'bi bi-arrow-down-right-square' })
|
||||
})
|
||||
}
|
||||
return days
|
||||
})
|
||||
|
||||
// Download Ics Options
|
||||
|
||||
const downloadIcsOptions = [
|
||||
{
|
||||
label: 'Subscribe... (webcal)',
|
||||
key: 'subscribe',
|
||||
icon: () => h('i', { class: 'bi bi-calendar-week text-blue' })
|
||||
icon: () => h('i', { class: 'bi bi-calendar-week' })
|
||||
},
|
||||
{
|
||||
label: 'Download... (.ics)',
|
||||
|
@ -60,6 +87,20 @@ const downloadIcsOptions = [
|
|||
|
||||
// METHODS
|
||||
|
||||
function jumpToDay (dayId) {
|
||||
if (dayId === 'now') {
|
||||
const lastEventId = agendaStore.findCurrentEventId()
|
||||
|
||||
if (lastEventId) {
|
||||
document.getElementById(`agenda-rowid-${lastEventId}`)?.scrollIntoView(true)
|
||||
} else {
|
||||
message.warning('There is no event happening right now.')
|
||||
}
|
||||
} else {
|
||||
document.getElementById(`agenda-day-${dayId}`)?.scrollIntoView(true)
|
||||
}
|
||||
}
|
||||
|
||||
function downloadIcs (key) {
|
||||
message.loading('Generating calendar file... Download will begin shortly.')
|
||||
let icsUrl = ''
|
||||
|
@ -102,6 +143,8 @@ function downloadIcs (key) {
|
|||
color: #FFF;
|
||||
padding: 0 15px;
|
||||
transition: all .4s ease;
|
||||
text-align: center;
|
||||
flex: 1 1;
|
||||
|
||||
& + button {
|
||||
margin-left: 1px;
|
||||
|
|
|
@ -362,7 +362,7 @@ const meetingEvents = computed(() => {
|
|||
if (item.links.calendar) {
|
||||
links.push({
|
||||
id: `lnk-${item.id}-calendar`,
|
||||
label: isMobile.value ? `Calendar (.ics) entry for this session` : `Calendar (.ics) entry for ${item.acronym} session on ${item.adjustedStart.toFormat('fff')}`,
|
||||
label: 'Calendar (.ics) entry for this session',
|
||||
icon: 'calendar-check',
|
||||
href: item.links.calendar,
|
||||
color: 'pink'
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
import { createApp } from 'vue'
|
||||
import { createPinia } from 'pinia'
|
||||
import piniaPersist from 'pinia-plugin-persist'
|
||||
import Embedded from './Embedded.vue'
|
||||
|
||||
// Initialize store (Pinia)
|
||||
|
||||
const pinia = createPinia()
|
||||
pinia.use(piniaPersist)
|
||||
|
||||
// Mount App
|
||||
|
||||
const mountEls = document.querySelectorAll('div.vue-embed')
|
||||
|
@ -9,5 +16,6 @@ for (const mnt of mountEls) {
|
|||
componentName: mnt.dataset.component,
|
||||
componentId: mnt.dataset.componentId
|
||||
})
|
||||
app.use(pinia)
|
||||
app.mount(mnt)
|
||||
}
|
||||
|
|
96
dev/coverage-action/package-lock.json
generated
96
dev/coverage-action/package-lock.json
generated
|
@ -14,10 +14,10 @@
|
|||
"chart.js": "3.5.1",
|
||||
"chartjs-node-canvas": "4.1.6",
|
||||
"lodash": "4.17.21",
|
||||
"luxon": "3.4.3"
|
||||
"luxon": "3.4.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "8.52.0",
|
||||
"eslint": "8.53.0",
|
||||
"eslint-config-standard": "17.1.0",
|
||||
"eslint-plugin-import": "2.29.0",
|
||||
"eslint-plugin-node": "11.1.0",
|
||||
|
@ -98,9 +98,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@eslint/eslintrc": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
|
||||
"integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
|
||||
"integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ajv": "^6.12.4",
|
||||
|
@ -121,9 +121,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "8.52.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz",
|
||||
"integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==",
|
||||
"version": "8.53.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
|
||||
"integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
|
@ -737,9 +737,9 @@
|
|||
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.10.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
|
||||
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
|
||||
"version": "8.11.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
|
||||
"integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
|
@ -1841,15 +1841,15 @@
|
|||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "8.52.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz",
|
||||
"integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==",
|
||||
"version": "8.53.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
|
||||
"integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.6.1",
|
||||
"@eslint/eslintrc": "^2.1.2",
|
||||
"@eslint/js": "8.52.0",
|
||||
"@eslint/eslintrc": "^2.1.3",
|
||||
"@eslint/js": "8.53.0",
|
||||
"@humanwhocodes/config-array": "^0.11.13",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
"@nodelib/fs.walk": "^1.2.8",
|
||||
|
@ -2666,9 +2666,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/globals": {
|
||||
"version": "13.21.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz",
|
||||
"integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==",
|
||||
"version": "13.23.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
|
||||
"integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"type-fest": "^0.20.2"
|
||||
|
@ -3632,9 +3632,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/luxon": {
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
|
||||
"integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==",
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
|
||||
"integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
|
@ -4788,9 +4788,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/punycode": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
||||
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
||||
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
|
@ -6349,9 +6349,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"@eslint/eslintrc": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
|
||||
"integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
|
||||
"integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^6.12.4",
|
||||
|
@ -6366,9 +6366,9 @@
|
|||
}
|
||||
},
|
||||
"@eslint/js": {
|
||||
"version": "8.52.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz",
|
||||
"integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==",
|
||||
"version": "8.53.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
|
||||
"integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
|
||||
"dev": true
|
||||
},
|
||||
"@fastify/busboy": {
|
||||
|
@ -6828,9 +6828,9 @@
|
|||
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
|
||||
},
|
||||
"acorn": {
|
||||
"version": "8.10.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
|
||||
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
|
||||
"version": "8.11.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
|
||||
"integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
|
||||
"dev": true
|
||||
},
|
||||
"acorn-jsx": {
|
||||
|
@ -7631,15 +7631,15 @@
|
|||
"dev": true
|
||||
},
|
||||
"eslint": {
|
||||
"version": "8.52.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz",
|
||||
"integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==",
|
||||
"version": "8.53.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
|
||||
"integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.6.1",
|
||||
"@eslint/eslintrc": "^2.1.2",
|
||||
"@eslint/js": "8.52.0",
|
||||
"@eslint/eslintrc": "^2.1.3",
|
||||
"@eslint/js": "8.53.0",
|
||||
"@humanwhocodes/config-array": "^0.11.13",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
"@nodelib/fs.walk": "^1.2.8",
|
||||
|
@ -8228,9 +8228,9 @@
|
|||
}
|
||||
},
|
||||
"globals": {
|
||||
"version": "13.21.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz",
|
||||
"integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==",
|
||||
"version": "13.23.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
|
||||
"integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"type-fest": "^0.20.2"
|
||||
|
@ -8919,9 +8919,9 @@
|
|||
}
|
||||
},
|
||||
"luxon": {
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
|
||||
"integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg=="
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
|
||||
"integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA=="
|
||||
},
|
||||
"make-dir": {
|
||||
"version": "3.1.0",
|
||||
|
@ -9760,9 +9760,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"punycode": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
||||
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
||||
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
||||
"dev": true
|
||||
},
|
||||
"pupa": {
|
||||
|
|
|
@ -11,10 +11,10 @@
|
|||
"chart.js": "3.5.1",
|
||||
"chartjs-node-canvas": "4.1.6",
|
||||
"lodash": "4.17.21",
|
||||
"luxon": "3.4.3"
|
||||
"luxon": "3.4.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "8.52.0",
|
||||
"eslint": "8.53.0",
|
||||
"eslint-config-standard": "17.1.0",
|
||||
"eslint-plugin-import": "2.29.0",
|
||||
"eslint-plugin-node": "11.1.0",
|
||||
|
|
14
dev/del-old-packages/package-lock.json
generated
14
dev/del-old-packages/package-lock.json
generated
|
@ -10,7 +10,7 @@
|
|||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@octokit/core": "^4.2.4",
|
||||
"luxon": "^3.4.3"
|
||||
"luxon": "^3.4.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/auth-token": {
|
||||
|
@ -141,9 +141,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/luxon": {
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
|
||||
"integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==",
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
|
||||
"integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
|
@ -315,9 +315,9 @@
|
|||
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
|
||||
},
|
||||
"luxon": {
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
|
||||
"integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg=="
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
|
||||
"integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA=="
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.6.7",
|
||||
|
|
|
@ -11,6 +11,6 @@
|
|||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@octokit/core": "^4.2.4",
|
||||
"luxon": "^3.4.3"
|
||||
"luxon": "^3.4.4"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ async function main () {
|
|||
throw new Error('Missing --branch argument!')
|
||||
}
|
||||
if (branch.indexOf('/') >= 0) {
|
||||
branch = branch.split('/')[1]
|
||||
branch = branch.split('/').shift().join('-')
|
||||
}
|
||||
branch = slugify(branch, { lower: true, strict: true })
|
||||
if (branch.length < 1) {
|
||||
|
|
14
dev/deploy-to-container/package-lock.json
generated
14
dev/deploy-to-container/package-lock.json
generated
|
@ -8,7 +8,7 @@
|
|||
"dependencies": {
|
||||
"dockerode": "^4.0.0",
|
||||
"fs-extra": "^11.1.1",
|
||||
"nanoid": "5.0.2",
|
||||
"nanoid": "5.0.3",
|
||||
"nanoid-dictionary": "5.0.0-beta.1",
|
||||
"slugify": "1.6.6",
|
||||
"tar": "^6.2.0",
|
||||
|
@ -337,9 +337,9 @@
|
|||
"optional": true
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.2.tgz",
|
||||
"integrity": "sha512-2ustYUX1R2rL/Br5B/FMhi8d5/QzvkJ912rBYxskcpu0myTHzSZfTr1LAS2Sm7jxRUObRrSBFoyzwAhL49aVSg==",
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.3.tgz",
|
||||
"integrity": "sha512-I7X2b22cxA4LIHXPSqbBCEQSL+1wv8TuoefejsX4HFWyC6jc5JG7CEaxOltiKjc1M+YCS2YkrZZcj4+dytw9GA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
|
@ -878,9 +878,9 @@
|
|||
"optional": true
|
||||
},
|
||||
"nanoid": {
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.2.tgz",
|
||||
"integrity": "sha512-2ustYUX1R2rL/Br5B/FMhi8d5/QzvkJ912rBYxskcpu0myTHzSZfTr1LAS2Sm7jxRUObRrSBFoyzwAhL49aVSg=="
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.3.tgz",
|
||||
"integrity": "sha512-I7X2b22cxA4LIHXPSqbBCEQSL+1wv8TuoefejsX4HFWyC6jc5JG7CEaxOltiKjc1M+YCS2YkrZZcj4+dytw9GA=="
|
||||
},
|
||||
"nanoid-dictionary": {
|
||||
"version": "5.0.0-beta.1",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"dependencies": {
|
||||
"dockerode": "^4.0.0",
|
||||
"fs-extra": "^11.1.1",
|
||||
"nanoid": "5.0.2",
|
||||
"nanoid": "5.0.3",
|
||||
"nanoid-dictionary": "5.0.0-beta.1",
|
||||
"slugify": "1.6.6",
|
||||
"tar": "^6.2.0",
|
||||
|
|
|
@ -53,16 +53,17 @@ INTERNAL_IPS = [".".join(ip.split(".")[:-1] + ["1"]) for ip in ips]
|
|||
# 'ietf.context_processors.sql_debug',
|
||||
# ]
|
||||
|
||||
DOCUMENT_PATH_PATTERN = '/assets/ietf-ftp/{doc.type_id}/'
|
||||
DOCUMENT_PATH_PATTERN = '/assets/ietfdata/doc/{doc.type_id}/'
|
||||
INTERNET_DRAFT_PATH = '/assets/ietf-ftp/internet-drafts/'
|
||||
RFC_PATH = '/assets/ietf-ftp/rfc/'
|
||||
CHARTER_PATH = '/assets/ietf-ftp/charter/'
|
||||
BOFREQ_PATH = '/assets/ietf-ftp/bofreq/'
|
||||
CONFLICT_REVIEW_PATH = '/assets/ietf-ftp/conflict-reviews/'
|
||||
STATUS_CHANGE_PATH = '/assets/ietf-ftp/status-changes/'
|
||||
INTERNET_DRAFT_ARCHIVE_DIR = '/assets/ietf-ftp/internet-drafts/'
|
||||
INTERNET_ALL_DRAFTS_ARCHIVE_DIR = '/assets/ietf-ftp/internet-drafts/'
|
||||
INTERNET_DRAFT_ARCHIVE_DIR = '/assets/archive/id'
|
||||
INTERNET_ALL_DRAFTS_ARCHIVE_DIR = '/assets/archive/id'
|
||||
BIBXML_BASE_PATH = '/assets/ietfdata/derived/bibxml'
|
||||
IDSUBMIT_REPOSITORY_PATH = INTERNET_DRAFT_PATH
|
||||
|
||||
NOMCOM_PUBLIC_KEYS_DIR = 'data/nomcom_keys/public_keys/'
|
||||
SLIDE_STAGING_PATH = '/test/staging/'
|
||||
|
|
14
dev/diff/package-lock.json
generated
14
dev/diff/package-lock.json
generated
|
@ -15,7 +15,7 @@
|
|||
"keypress": "^0.2.1",
|
||||
"listr2": "^6.6.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
"luxon": "^3.4.3",
|
||||
"luxon": "^3.4.4",
|
||||
"pretty-bytes": "^6.1.1",
|
||||
"tar": "^6.2.0",
|
||||
"yargs": "^17.7.2"
|
||||
|
@ -859,9 +859,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/luxon": {
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
|
||||
"integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==",
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
|
||||
"integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
|
@ -1950,9 +1950,9 @@
|
|||
"integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ=="
|
||||
},
|
||||
"luxon": {
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
|
||||
"integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg=="
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
|
||||
"integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA=="
|
||||
},
|
||||
"mimic-fn": {
|
||||
"version": "2.1.0",
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"keypress": "^0.2.1",
|
||||
"listr2": "^6.6.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
"luxon": "^3.4.3",
|
||||
"luxon": "^3.4.4",
|
||||
"pretty-bytes": "^6.1.1",
|
||||
"tar": "^6.2.0",
|
||||
"yargs": "^17.7.2"
|
||||
|
|
|
@ -12,7 +12,7 @@ echo "Fetching latest images..."
|
|||
docker pull ghcr.io/ietf-tools/datatracker-app-base:latest
|
||||
docker pull ghcr.io/ietf-tools/datatracker-db:latest
|
||||
echo "Starting containers..."
|
||||
docker compose -f docker-compose.debug.yml -p dtdebug up -d
|
||||
docker compose -f docker-compose.debug.yml -p dtdebug --compatibility up -d
|
||||
echo "Copying working directory into container..."
|
||||
docker compose -p dtdebug cp ../../. app:/__w/datatracker/datatracker/
|
||||
echo "Run prepare script..."
|
||||
|
|
|
@ -16,6 +16,12 @@ services:
|
|||
CI: 'true'
|
||||
GITHUB_ACTIONS: 'true'
|
||||
HOME: /github/home
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '2'
|
||||
memory: '7GB'
|
||||
|
||||
db:
|
||||
image: ghcr.io/ietf-tools/datatracker-db:latest
|
||||
restart: unless-stopped
|
||||
|
|
|
@ -19,7 +19,7 @@ RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesourc
|
|||
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
|
||||
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
|
||||
|
||||
# Add PostgreSQL Source
|
||||
RUN echo "deb http://apt.postgresql.org/pub/repos/apt $(. /etc/os-release && echo "$VERSION_CODENAME")-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list
|
||||
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
|
||||
|
@ -83,15 +83,6 @@ RUN apt-get update --fix-missing && apt-get install -qy --no-install-recommends
|
|||
# Install kramdown-rfc2629 (ruby)
|
||||
RUN gem install kramdown-rfc2629
|
||||
|
||||
# Install chromedriver
|
||||
COPY docker/scripts/app-install-chromedriver.sh /tmp/app-install-chromedriver.sh
|
||||
RUN sed -i 's/\r$//' /tmp/app-install-chromedriver.sh && \
|
||||
chmod +x /tmp/app-install-chromedriver.sh
|
||||
RUN /tmp/app-install-chromedriver.sh
|
||||
|
||||
# Fix /dev/shm permissions for chromedriver
|
||||
RUN chmod 1777 /dev/shm
|
||||
|
||||
# GeckoDriver
|
||||
ARG GECKODRIVER_VERSION=latest
|
||||
RUN GK_VERSION=$(if [ ${GECKODRIVER_VERSION:-latest} = "latest" ]; then echo "0.33.0"; else echo $GECKODRIVER_VERSION; fi) \
|
||||
|
|
|
@ -18,9 +18,6 @@ sudo chown -R dev:dev "$WORKSPACEDIR/.vite"
|
|||
sudo chown -R dev:dev "$WORKSPACEDIR/.yarn/unplugged"
|
||||
sudo chown dev:dev "/assets"
|
||||
|
||||
echo "Fix chromedriver /dev/shm permissions..."
|
||||
sudo chmod 1777 /dev/shm
|
||||
|
||||
# Run nginx
|
||||
echo "Starting nginx..."
|
||||
sudo nginx
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
HOSTARCH=$(arch)
|
||||
if [ $HOSTARCH == "x86_64" ]; then
|
||||
echo "Installing chrome driver..."
|
||||
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
|
||||
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
|
||||
apt-get update -y
|
||||
apt-get install -y google-chrome-stable
|
||||
CHROMEVER=$(google-chrome --product-version | grep -o "[^\.]*\.[^\.]*\.[^\.]*")
|
||||
DRIVERVER=$(curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROMEVER")
|
||||
wget -q --continue -P /chromedriver "http://chromedriver.storage.googleapis.com/$DRIVERVER/chromedriver_linux64.zip"
|
||||
unzip /chromedriver/chromedriver* -d /chromedriver
|
||||
ln -s /chromedriver/chromedriver /usr/local/bin/chromedriver
|
||||
ln -s /chromedriver/chromedriver /usr/bin/chromedriver
|
||||
else
|
||||
echo "This architecture doesn't support chromedriver. Skipping installation..."
|
||||
fi
|
|
@ -11,7 +11,7 @@ register = template.Library()
|
|||
|
||||
@register.simple_tag
|
||||
def active_groups_menu(flavor):
|
||||
parents = GroupTypeName.objects.filter(slug__in=["ag", "area", "rag", "team", "dir", "program"])
|
||||
parents = GroupTypeName.objects.filter(slug__in=["ag", "area", "rag", "team", "dir", "program", "iabworkshop"])
|
||||
others = []
|
||||
for group in Group.objects.filter(acronym__in=("rsoc",), state_id="active"):
|
||||
group.menu_url = reverse("ietf.group.views.group_home", kwargs=dict(acronym=group.acronym)) # type: ignore
|
||||
|
@ -23,4 +23,4 @@ def active_groups_menu(flavor):
|
|||
return render_to_string(
|
||||
"base/menu_active_groups.html",
|
||||
{"parents": parents, "others": others, "flavor": flavor},
|
||||
)
|
||||
)
|
||||
|
|
|
@ -41,7 +41,7 @@ class EditAuthorsTests(IetfSeleniumTestCase):
|
|||
(By.CSS_SELECTOR, result_selector),
|
||||
name
|
||||
))
|
||||
input.send_keys('\n') # select the object
|
||||
self.driver.find_element(By.CSS_SELECTOR, result_selector).click()
|
||||
|
||||
# After the author is selected, the email select options will be populated.
|
||||
# Wait for that, then click on the option corresponding to the requested email.
|
||||
|
@ -94,10 +94,8 @@ class EditAuthorsTests(IetfSeleniumTestCase):
|
|||
# get the "add author" button so we can add blank author forms
|
||||
add_author_button = self.driver.find_element(By.ID, 'add-author-button')
|
||||
for index, auth in enumerate(authors):
|
||||
self.driver.execute_script("arguments[0].scrollIntoView();", add_author_button) # FIXME: no idea why this fails:
|
||||
# self.scroll_to_element(add_author_button) # Can only click if it's in view!
|
||||
self.driver.execute_script("arguments[0].click();", add_author_button) # FIXME: no idea why this fails:
|
||||
# add_author_button.click() # Create a new form. Automatically scrolls to it.
|
||||
self.scroll_to_element(add_author_button) # Can only click if it's in view!
|
||||
add_author_button.click() # Create a new form. Automatically scrolls to it.
|
||||
author_forms = authors_list.find_elements(By.CLASS_NAME, 'author-panel')
|
||||
authors_added = index + 1
|
||||
self.assertEqual(len(author_forms), authors_added + 1) # Started with 1 author, hence +1
|
||||
|
@ -119,9 +117,8 @@ class EditAuthorsTests(IetfSeleniumTestCase):
|
|||
self.driver.find_element(By.ID, 'id_basis').send_keys('change testing')
|
||||
# Now click the 'submit' button and check that the update was accepted.
|
||||
submit_button = self.driver.find_element(By.CSS_SELECTOR, '#content button[type="submit"]')
|
||||
self.driver.execute_script("arguments[0].click();", submit_button) # FIXME: no idea why this fails:
|
||||
# self.scroll_to_element(submit_button)
|
||||
# submit_button.click()
|
||||
self.scroll_to_element(submit_button)
|
||||
submit_button.click()
|
||||
# Wait for redirect to the document_main view
|
||||
self.wait.until(
|
||||
expected_conditions.url_to_be(
|
||||
|
|
34
ietf/group/migrations/0003_iabworkshops.py
Normal file
34
ietf/group/migrations/0003_iabworkshops.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
# Copyright The IETF Trust 2023, All Rights Reserved
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
def forward(apps, schema_editor):
|
||||
GroupFeatures = apps.get_model("group", "GroupFeatures")
|
||||
GroupTypeName = apps.get_model("name", "GroupTypeName")
|
||||
|
||||
iabworkshop = GroupFeatures.objects.create(
|
||||
type_id="iabworkshop",
|
||||
need_parent=True,
|
||||
default_parent="iab",
|
||||
has_documents=True,
|
||||
has_session_materials=True,
|
||||
has_meetings=True,
|
||||
has_default_chat=True,
|
||||
session_purposes='["regular"]',
|
||||
)
|
||||
iabworkshop.parent_types.add(GroupTypeName.objects.get(slug="ietf"))
|
||||
|
||||
|
||||
def reverse(apps, schema_editor):
|
||||
GroupFeatures = apps.get_model("group", "GroupFeatures")
|
||||
GroupFeatures.objects.filter(type="iabworkshop").delete()
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("group", "0002_appeal"),
|
||||
("name", "0009_iabworkshops"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forward, reverse)
|
||||
]
|
|
@ -71,7 +71,7 @@ class GroupPagesTests(TestCase):
|
|||
self.assertContains(r, group.name)
|
||||
self.assertContains(r, escape(group.ad_role().person.name))
|
||||
|
||||
for t in ('rg','area','ag', 'rag', 'dir','review','team','program','iabasg','adm','rfcedtyp'): # See issue 5120
|
||||
for t in ('rg','area','ag', 'rag', 'dir','review','team','program','iabasg','iabworkshop','adm','rfcedtyp'): # See issue 5120
|
||||
g = GroupFactory.create(type_id=t,state_id='active')
|
||||
if t in ['dir','review']:
|
||||
g.parent = GroupFactory.create(type_id='area',state_id='active')
|
||||
|
@ -87,7 +87,7 @@ class GroupPagesTests(TestCase):
|
|||
self.assertContains(r, "Directorate")
|
||||
self.assertContains(r, "AG")
|
||||
|
||||
for slug in GroupTypeName.objects.exclude(slug__in=['wg','rg','ag','rag','area','dir','review','team','program','adhoc','ise','adm','iabasg','rfcedtyp', 'edwg', 'edappr']).values_list('slug',flat=True):
|
||||
for slug in GroupTypeName.objects.exclude(slug__in=['wg','rg','ag','rag','area','dir','review','team','program','adhoc','ise','adm','iabasg','iabworkshop','rfcedtyp', 'edwg', 'edappr']).values_list('slug',flat=True):
|
||||
with self.assertRaises(NoReverseMatch):
|
||||
url=urlreverse('ietf.group.views.active_groups', kwargs=dict(group_type=slug))
|
||||
|
||||
|
|
|
@ -291,7 +291,7 @@ def active_groups(request, group_type=None):
|
|||
return active_dirs(request)
|
||||
elif group_type == "review":
|
||||
return active_review_dirs(request)
|
||||
elif group_type in ("program", "iabasg"):
|
||||
elif group_type in ("program", "iabasg","iabworkshop"):
|
||||
return active_iab(request)
|
||||
elif group_type == "adm":
|
||||
return active_adm(request)
|
||||
|
@ -314,6 +314,7 @@ def active_group_types(request):
|
|||
"area",
|
||||
"program",
|
||||
"iabasg",
|
||||
"iabworkshop"
|
||||
"adm",
|
||||
]
|
||||
)
|
||||
|
@ -344,7 +345,7 @@ def active_teams(request):
|
|||
return render(request, 'group/active_teams.html', {'teams' : teams })
|
||||
|
||||
def active_iab(request):
|
||||
iabgroups = Group.objects.filter(type__in=("program","iabasg"), state="active").order_by("-type_id","name")
|
||||
iabgroups = Group.objects.filter(type__in=("program","iabasg","iabworkshop"), state="active").order_by("-type_id","name")
|
||||
for group in iabgroups:
|
||||
group.leads = sorted(roles(group, "lead"), key=extract_last_name)
|
||||
return render(request, 'group/active_iabgroups.html', {'iabgroups' : iabgroups })
|
||||
|
@ -1335,7 +1336,7 @@ def stream_edit(request, acronym):
|
|||
@cache_control(public=True, max_age=30*60)
|
||||
@cache_page(30 * 60)
|
||||
def group_menu_data(request):
|
||||
groups = Group.objects.filter(state="active", parent__state="active").filter(Q(type__features__acts_like_wg=True)|Q(type_id__in=['program','iabasg'])|Q(parent__acronym='ietfadminllc')|Q(parent__acronym='rfceditor')).order_by("-type_id","acronym")
|
||||
groups = Group.objects.filter(state="active", parent__state="active").filter(Q(type__features__acts_like_wg=True)|Q(type_id__in=['program','iabasg','iabworkshop'])|Q(parent__acronym='ietfadminllc')|Q(parent__acronym='rfceditor')).order_by("-type_id","acronym")
|
||||
|
||||
groups_by_parent = defaultdict(list)
|
||||
for g in groups:
|
||||
|
|
|
@ -317,10 +317,21 @@ class AgendaFilterOrganizer(AgendaKeywordTool):
|
|||
groups = set(self._get_group(s) for s in self.sessions
|
||||
if s
|
||||
and self._get_group(s))
|
||||
log.assertion('len(groups) == len(set(g.acronym for g in groups))') # no repeated acros
|
||||
# Verify that we're not using the same acronym for more than one distinct group, accounting for
|
||||
# the possibility that some groups are GroupHistory instances. This assertion will fail if a Group
|
||||
# and GroupHistory for the same group have a different acronym - in that event, the filter will
|
||||
# not match the meeting display, so we should be alerted that this has actually occurred.
|
||||
log.assertion(
|
||||
"len(set(getattr(g, 'group_id', g.id) for g in groups)) "
|
||||
"== len(set(g.acronym for g in groups))"
|
||||
)
|
||||
|
||||
group_parents = set(self._get_group_parent(g) for g in groups if self._get_group_parent(g))
|
||||
log.assertion('len(group_parents) == len(set(gp.acronym for gp in group_parents))') # no repeated acros
|
||||
# See above for explanation of this assertion
|
||||
log.assertion(
|
||||
"len(set(getattr(gp, 'group_id', gp.id) for gp in group_parents)) "
|
||||
"== len(set(gp.acronym for gp in group_parents))"
|
||||
)
|
||||
|
||||
all_groups = groups.union(group_parents)
|
||||
all_groups.difference_update([g for g in all_groups if g.acronym in self.exclude_acronyms])
|
||||
|
|
|
@ -499,7 +499,7 @@ class EditMeetingScheduleTests(IetfSeleniumTestCase):
|
|||
clicked_index = 1
|
||||
# scroll so the button we want to click is just below the navbar, otherwise it may
|
||||
# fall beneath the sessions panel
|
||||
navbar = self.driver.find_element_by_class_name('navbar')
|
||||
navbar = self.driver.find_element(By.CSS_SELECTOR, '.navbar')
|
||||
self.driver.execute_script(
|
||||
'window.scrollBy({top: %s, behavior: "instant"})' % (
|
||||
future_swap_days_buttons[1].location['y'] - navbar.size['height']
|
||||
|
@ -1232,10 +1232,13 @@ class InterimTests(IetfSeleniumTestCase):
|
|||
self.driver.get(self.absreverse('ietf.meeting.views.upcoming'))
|
||||
tz_select_input = self.driver.find_element(By.ID, 'timezone-select')
|
||||
tz_select_bottom_input = self.driver.find_element(By.ID, 'timezone-select-bottom')
|
||||
local_tz_link = self.driver.find_element(By.ID, 'local-timezone')
|
||||
utc_tz_link = self.driver.find_element(By.ID, 'utc-timezone')
|
||||
local_tz_bottom_link = self.driver.find_element(By.ID, 'local-timezone-bottom')
|
||||
utc_tz_bottom_link = self.driver.find_element(By.ID, 'utc-timezone-bottom')
|
||||
|
||||
# For things we click, need to click the labels / actually visible items. The actual inputs are hidden
|
||||
# and managed by the JS.
|
||||
local_tz_link = self.driver.find_element(By.CSS_SELECTOR, 'label[for="local-timezone"]')
|
||||
utc_tz_link = self.driver.find_element(By.CSS_SELECTOR, 'label[for="utc-timezone"]')
|
||||
local_tz_bottom_link = self.driver.find_element(By.CSS_SELECTOR, 'label[for="local-timezone-bottom"]')
|
||||
utc_tz_bottom_link = self.driver.find_element(By.CSS_SELECTOR, 'label[for="utc-timezone-bottom"]')
|
||||
|
||||
# wait for the select box to be updated - look for an arbitrary time zone to be in
|
||||
# its options list to detect this
|
||||
|
@ -1245,7 +1248,10 @@ class InterimTests(IetfSeleniumTestCase):
|
|||
(By.CSS_SELECTOR, '#timezone-select > option[value="%s"]' % arbitrary_tz)
|
||||
)
|
||||
)
|
||||
|
||||
tz_selector_clickables = self.driver.find_elements(By.CSS_SELECTOR, ".tz-display .select2")
|
||||
self.assertEqual(len(tz_selector_clickables), 2)
|
||||
(tz_selector_top, tz_selector_bottom) = tz_selector_clickables
|
||||
|
||||
arbitrary_tz_bottom_opt = tz_select_bottom_input.find_element(By.CSS_SELECTOR,
|
||||
'#timezone-select-bottom > option[value="%s"]' % arbitrary_tz)
|
||||
|
||||
|
@ -1266,8 +1272,7 @@ class InterimTests(IetfSeleniumTestCase):
|
|||
_assert_ietf_tz_correct(ietf_meetings, local_tz)
|
||||
|
||||
# click 'utc' button
|
||||
self.driver.execute_script("arguments[0].click();", utc_tz_link) # FIXME-LARS: not working:
|
||||
# utc_tz_link.click()
|
||||
utc_tz_link.click()
|
||||
self.wait.until(expected_conditions.element_to_be_selected(utc_tz_opt))
|
||||
self.assertFalse(local_tz_opt.is_selected())
|
||||
self.assertFalse(local_tz_bottom_opt.is_selected())
|
||||
|
@ -1279,8 +1284,7 @@ class InterimTests(IetfSeleniumTestCase):
|
|||
_assert_ietf_tz_correct(ietf_meetings, 'UTC')
|
||||
|
||||
# click back to 'local'
|
||||
self.driver.execute_script("arguments[0].click();", local_tz_link) # FIXME-LARS: not working:
|
||||
# local_tz_link.click()
|
||||
local_tz_link.click()
|
||||
self.wait.until(expected_conditions.element_to_be_selected(local_tz_opt))
|
||||
self.assertTrue(local_tz_opt.is_selected())
|
||||
self.assertTrue(local_tz_bottom_opt.is_selected())
|
||||
|
@ -1292,7 +1296,12 @@ class InterimTests(IetfSeleniumTestCase):
|
|||
_assert_ietf_tz_correct(ietf_meetings, local_tz)
|
||||
|
||||
# Now select a different item from the select input
|
||||
arbitrary_tz_opt.click()
|
||||
tz_selector_top.click()
|
||||
self.wait.until(
|
||||
expected_conditions.presence_of_element_located(
|
||||
(By.CSS_SELECTOR, 'span.select2-container .select2-results li[id$="America/Halifax"]')
|
||||
)
|
||||
).click()
|
||||
self.wait.until(expected_conditions.element_to_be_selected(arbitrary_tz_opt))
|
||||
self.assertFalse(local_tz_opt.is_selected())
|
||||
self.assertFalse(local_tz_bottom_opt.is_selected())
|
||||
|
@ -1305,8 +1314,8 @@ class InterimTests(IetfSeleniumTestCase):
|
|||
|
||||
# Now repeat those tests using the widgets at the bottom of the page
|
||||
# click 'utc' button
|
||||
self.driver.execute_script("arguments[0].click();", utc_tz_bottom_link) # FIXME-LARS: not working:
|
||||
# utc_tz_bottom_link.click()
|
||||
self.scroll_to_element(utc_tz_bottom_link)
|
||||
utc_tz_bottom_link.click()
|
||||
self.wait.until(expected_conditions.element_to_be_selected(utc_tz_opt))
|
||||
self.assertFalse(local_tz_opt.is_selected())
|
||||
self.assertFalse(local_tz_bottom_opt.is_selected())
|
||||
|
@ -1318,8 +1327,8 @@ class InterimTests(IetfSeleniumTestCase):
|
|||
_assert_ietf_tz_correct(ietf_meetings, 'UTC')
|
||||
|
||||
# click back to 'local'
|
||||
self.driver.execute_script("arguments[0].click();", local_tz_bottom_link) # FIXME-LARS: not working:
|
||||
# local_tz_bottom_link.click()
|
||||
self.scroll_to_element(local_tz_bottom_link)
|
||||
local_tz_bottom_link.click()
|
||||
self.wait.until(expected_conditions.element_to_be_selected(local_tz_opt))
|
||||
self.assertTrue(local_tz_opt.is_selected())
|
||||
self.assertTrue(local_tz_bottom_opt.is_selected())
|
||||
|
@ -1331,7 +1340,13 @@ class InterimTests(IetfSeleniumTestCase):
|
|||
_assert_ietf_tz_correct(ietf_meetings, local_tz)
|
||||
|
||||
# Now select a different item from the select input
|
||||
arbitrary_tz_bottom_opt.click()
|
||||
self.scroll_to_element(tz_selector_bottom)
|
||||
tz_selector_bottom.click()
|
||||
self.wait.until(
|
||||
expected_conditions.presence_of_element_located(
|
||||
(By.CSS_SELECTOR, 'span.select2-container .select2-results li[id$="America/Halifax"]')
|
||||
)
|
||||
).click()
|
||||
self.wait.until(expected_conditions.element_to_be_selected(arbitrary_tz_opt))
|
||||
self.assertFalse(local_tz_opt.is_selected())
|
||||
self.assertFalse(local_tz_bottom_opt.is_selected())
|
||||
|
@ -1382,6 +1397,7 @@ class InterimTests(IetfSeleniumTestCase):
|
|||
),
|
||||
'Modal close button not found or not clickable',
|
||||
)
|
||||
time.sleep(0.3) # gross, but the button is clickable while still fading in
|
||||
close_modal_button.click()
|
||||
self.wait.until(
|
||||
expected_conditions.invisibility_of_element(modal_div),
|
||||
|
|
|
@ -3123,6 +3123,45 @@
|
|||
"model": "group.groupfeatures",
|
||||
"pk": "iabasg"
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"about_page": "ietf.group.views.group_about",
|
||||
"acts_like_wg": false,
|
||||
"admin_roles": "[\n \"chair\"\n]",
|
||||
"agenda_filter_type": "none",
|
||||
"agenda_type": "ietf",
|
||||
"create_wiki": false,
|
||||
"custom_group_roles": false,
|
||||
"customize_workflow": false,
|
||||
"default_parent": "iab",
|
||||
"default_tab": "ietf.group.views.group_about",
|
||||
"default_used_roles": "[]",
|
||||
"docman_roles": "[\n \"ad\",\n \"chair\",\n \"delegate\",\n \"secr\"\n]",
|
||||
"groupman_authroles": "[\n \"Secretariat\"\n]",
|
||||
"groupman_roles": "[\n \"ad\",\n \"chair\"\n]",
|
||||
"has_chartering_process": false,
|
||||
"has_default_chat": true,
|
||||
"has_documents": true,
|
||||
"has_meetings": true,
|
||||
"has_milestones": false,
|
||||
"has_nonsession_materials": false,
|
||||
"has_reviews": false,
|
||||
"has_session_materials": true,
|
||||
"is_schedulable": false,
|
||||
"material_types": "[\n \"slides\"\n]",
|
||||
"matman_roles": "[\n \"ad\",\n \"chair\",\n \"delegate\",\n \"secr\"\n]",
|
||||
"need_parent": true,
|
||||
"parent_types": [
|
||||
"ietf"
|
||||
],
|
||||
"req_subm_approval": false,
|
||||
"role_order": "[\n \"chair\",\n \"secr\",\n \"member\"\n]",
|
||||
"session_purposes": "\"[\\\"regular\\\"]\"",
|
||||
"show_on_agenda": false
|
||||
},
|
||||
"model": "group.groupfeatures",
|
||||
"pk": "iabworkshop"
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"about_page": "ietf.group.views.group_about",
|
||||
|
@ -5054,6 +5093,21 @@
|
|||
"model": "mailtrigger.mailtrigger",
|
||||
"pk": "review_completed_httpdir_early"
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"cc": [
|
||||
"ietf_last_call",
|
||||
"review_doc_all_parties",
|
||||
"review_doc_group_mail_list"
|
||||
],
|
||||
"desc": "Recipients when a httpdir Last Call review is completed",
|
||||
"to": [
|
||||
"review_team_mail_list"
|
||||
]
|
||||
},
|
||||
"model": "mailtrigger.mailtrigger",
|
||||
"pk": "review_completed_httpdir_lc"
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"cc": [
|
||||
|
@ -11530,6 +11584,17 @@
|
|||
"model": "name.grouptypename",
|
||||
"pk": "iabasg"
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"desc": "IAB Workshop",
|
||||
"name": "IAB Workshop",
|
||||
"order": 0,
|
||||
"used": true,
|
||||
"verbose_name": "IAB Workshop"
|
||||
},
|
||||
"model": "name.grouptypename",
|
||||
"pk": "iabworkshop"
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"desc": "",
|
||||
|
@ -16562,7 +16627,7 @@
|
|||
"fields": {
|
||||
"command": "xym",
|
||||
"switch": "--version",
|
||||
"time": "2023-08-22T07:09:39.542Z",
|
||||
"time": "2023-11-21T08:09:45.989Z",
|
||||
"used": true,
|
||||
"version": "xym 0.7.0"
|
||||
},
|
||||
|
@ -16573,9 +16638,9 @@
|
|||
"fields": {
|
||||
"command": "pyang",
|
||||
"switch": "--version",
|
||||
"time": "2023-08-22T07:09:39.881Z",
|
||||
"time": "2023-11-21T08:09:46.322Z",
|
||||
"used": true,
|
||||
"version": "pyang 2.5.3"
|
||||
"version": "pyang 2.6.0"
|
||||
},
|
||||
"model": "utils.versioninfo",
|
||||
"pk": 2
|
||||
|
@ -16584,7 +16649,7 @@
|
|||
"fields": {
|
||||
"command": "yanglint",
|
||||
"switch": "--version",
|
||||
"time": "2023-08-22T07:09:39.899Z",
|
||||
"time": "2023-11-21T08:09:46.338Z",
|
||||
"used": true,
|
||||
"version": "yanglint SO 1.9.2"
|
||||
},
|
||||
|
@ -16595,9 +16660,9 @@
|
|||
"fields": {
|
||||
"command": "xml2rfc",
|
||||
"switch": "--version",
|
||||
"time": "2023-08-22T07:09:40.791Z",
|
||||
"time": "2023-11-21T08:09:47.251Z",
|
||||
"used": true,
|
||||
"version": "xml2rfc 3.18.0"
|
||||
"version": "xml2rfc 3.18.2"
|
||||
},
|
||||
"model": "utils.versioninfo",
|
||||
"pk": 4
|
||||
|
|
29
ietf/name/migrations/0009_iabworkshops.py
Normal file
29
ietf/name/migrations/0009_iabworkshops.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
# Copyright The IETF Trust 2023, All Rights Reserved
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
def forward(apps, schema_editor):
|
||||
GroupTypeName = apps.get_model("name", "GroupTypeName")
|
||||
GroupTypeName.objects.create(
|
||||
slug = "iabworkshop",
|
||||
name = "IAB Workshop",
|
||||
desc = "IAB Workshop",
|
||||
used = True,
|
||||
order = 0,
|
||||
verbose_name = "IAB Workshop",
|
||||
|
||||
)
|
||||
|
||||
def reverse(apps, schema_editor):
|
||||
GroupTypeName = apps.get_model("name", "GroupTypeName")
|
||||
GroupTypeName.objects.filter(slug="iabworkshop").delete()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("name", "0008_removed_objfalse"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forward, reverse)
|
||||
]
|
|
@ -572,8 +572,6 @@ GLOBAL_TEST_FIXTURES = [ 'names','ietf.utils.test_data.make_immutable_base_data'
|
|||
|
||||
TEST_DIFF_FAILURE_DIR = "/tmp/test/failure/"
|
||||
|
||||
TEST_GHOSTDRIVER_LOG_PATH = "ghostdriver.log"
|
||||
|
||||
# These are regexes
|
||||
TEST_URL_COVERAGE_EXCLUDE = [
|
||||
r"^\^admin/",
|
||||
|
@ -1155,6 +1153,7 @@ CELERY_TIMEZONE = 'UTC'
|
|||
CELERY_BROKER_URL = 'amqp://mq/'
|
||||
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
|
||||
CELERY_BEAT_SYNC_EVERY = 1 # update DB after every event
|
||||
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True # the default, but setting it squelches a warning
|
||||
|
||||
# Meetecho API setup: Uncomment this and provide real credentials to enable
|
||||
# Meetecho conference creation for interim session requests
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
publisher = {% templatetag openbrace %}Internet Engineering Task Force{% templatetag closebrace %},
|
||||
note = {% templatetag openbrace %}Work in Progress{% templatetag closebrace %},
|
||||
url = {% templatetag openbrace %}{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name=doc.name rev=doc.rev %}{% templatetag closebrace %},{% endif %}
|
||||
author = {% templatetag openbrace %}{% for author in doc.documentauthor_set.all %}{{ author.person.name|texescape}}{% if not forloop.last %} and {% endif %}{% endfor %}{% templatetag closebrace %},
|
||||
author = {% templatetag openbrace %}{% for author in doc.documentauthor_set.all %}{{ author.person.name|texescape}}{% if not forloop.last %} and {% endif %}{% endfor %}{% templatetag closebrace %},
|
||||
title = {% templatetag openbrace %}{% templatetag openbrace %}{{doc.title|texescape}}{% templatetag closebrace %}{% templatetag closebrace %},
|
||||
pagetotal = {{ doc.pages }},
|
||||
year = {{ doc.pub_date.year }},
|
||||
|
|
|
@ -89,6 +89,12 @@
|
|||
right: 0;
|
||||
z-index: 1000000000;
|
||||
}
|
||||
|
||||
.theme-dark #app-loading-footer .btn-light {
|
||||
background-color: rgba(255,255,255,.1) !important;
|
||||
border-color: rgba(255,255,255,.05) !important;
|
||||
color: #FFF !important;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% origin %}
|
||||
|
|
|
@ -65,7 +65,7 @@ urlpatterns = [
|
|||
url(r'^submit/', include('ietf.submit.urls')),
|
||||
url(r'^sync/', include('ietf.sync.urls')),
|
||||
url(r'^templates/', include('ietf.dbtemplate.urls')),
|
||||
url(r'^(?P<group_type>(wg|rg|ag|rag|team|dir|review|area|program|iabasg|adhoc|ise|adm|rfcedtyp|edwg|edappr))/', include(grouptype_urls)),
|
||||
url(r'^(?P<group_type>(wg|rg|ag|rag|team|dir|review|area|program|iabasg|iabworkshop|adhoc|ise|adm|rfcedtyp|edwg|edappr))/', include(grouptype_urls)),
|
||||
|
||||
# Redirects
|
||||
url(r'^(?P<path>public)/', include('ietf.redirects.urls')),
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
# Copyright The IETF Trust 2014-2021, All Rights Reserved
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from django.conf import settings
|
||||
import os
|
||||
|
||||
from django.urls import reverse as urlreverse
|
||||
from unittest import skipIf
|
||||
|
||||
|
@ -9,10 +10,9 @@ skip_selenium = False
|
|||
skip_message = ""
|
||||
try:
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.chrome.service import Service
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
from selenium.webdriver.firefox.service import Service
|
||||
from selenium.webdriver.firefox.options import Options
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
|
||||
except ImportError as e:
|
||||
skip_selenium = True
|
||||
skip_message = "Skipping selenium tests: %s" % e
|
||||
|
@ -21,7 +21,7 @@ except ImportError as e:
|
|||
from ietf.utils.pipe import pipe
|
||||
from ietf.utils.test_runner import IetfLiveServerTestCase
|
||||
|
||||
executable_name = 'chromedriver'
|
||||
executable_name = 'geckodriver'
|
||||
code, out, err = pipe('{} --version'.format(executable_name))
|
||||
if code != 0:
|
||||
skip_selenium = True
|
||||
|
@ -30,20 +30,11 @@ if skip_selenium:
|
|||
print(" "+skip_message)
|
||||
|
||||
def start_web_driver():
|
||||
service = Service(executable_path="chromedriver",
|
||||
log_path=settings.TEST_GHOSTDRIVER_LOG_PATH)
|
||||
service.start()
|
||||
service = Service(log_output=f"{executable_name}.log", service_args=['--log-no-truncate'])
|
||||
options = Options()
|
||||
options.add_argument("headless")
|
||||
options.add_argument("disable-extensions")
|
||||
options.add_argument("disable-gpu") # headless needs this
|
||||
options.add_argument("no-sandbox") # docker needs this
|
||||
dc = DesiredCapabilities.CHROME
|
||||
dc["goog:loggingPrefs"] = {"browser": "ALL"}
|
||||
# For selenium 3:
|
||||
return webdriver.Chrome("chromedriver", options=options, desired_capabilities=dc)
|
||||
# For selenium 4:
|
||||
# return webdriver.Chrome(service=service, options=options, desired_capabilities=dc)
|
||||
options.add_argument("--headless")
|
||||
os.environ["MOZ_REMOTE_SETTINGS_DEVTOOLS"] = "1"
|
||||
return webdriver.Firefox(service=service, options=options)
|
||||
|
||||
|
||||
def selenium_enabled():
|
||||
|
|
154
playwright/package-lock.json
generated
154
playwright/package-lock.json
generated
|
@ -9,17 +9,17 @@
|
|||
"@faker-js/faker": "8.2.0",
|
||||
"lodash": "4.17.21",
|
||||
"lodash-es": "4.17.21",
|
||||
"luxon": "3.4.3",
|
||||
"luxon": "3.4.4",
|
||||
"ms": "2.1.3",
|
||||
"seedrandom": "3.0.5",
|
||||
"slugify": "1.6.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "1.39.0",
|
||||
"eslint": "8.52.0",
|
||||
"eslint": "8.53.0",
|
||||
"eslint-config-standard": "17.1.0",
|
||||
"eslint-plugin-import": "2.29.0",
|
||||
"eslint-plugin-n": "16.2.0",
|
||||
"eslint-plugin-n": "16.3.1",
|
||||
"eslint-plugin-node": "11.1.0",
|
||||
"eslint-plugin-promise": "6.1.1",
|
||||
"npm-check-updates": "16.14.6"
|
||||
|
@ -69,9 +69,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@eslint/eslintrc": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
|
||||
"integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
|
||||
"integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ajv": "^6.12.4",
|
||||
|
@ -92,9 +92,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "8.52.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz",
|
||||
"integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==",
|
||||
"version": "8.53.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
|
||||
"integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
|
@ -576,9 +576,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.10.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
|
||||
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
|
||||
"version": "8.11.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
|
||||
"integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
|
@ -968,6 +968,18 @@
|
|||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/builtin-modules": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
|
||||
"integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/builtins": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
|
||||
|
@ -1625,15 +1637,15 @@
|
|||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "8.52.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz",
|
||||
"integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==",
|
||||
"version": "8.53.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
|
||||
"integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.6.1",
|
||||
"@eslint/eslintrc": "^2.1.2",
|
||||
"@eslint/js": "8.52.0",
|
||||
"@eslint/eslintrc": "^2.1.3",
|
||||
"@eslint/js": "8.53.0",
|
||||
"@humanwhocodes/config-array": "^0.11.13",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
"@nodelib/fs.walk": "^1.2.8",
|
||||
|
@ -1835,9 +1847,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-n": {
|
||||
"version": "16.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.2.0.tgz",
|
||||
"integrity": "sha512-AQER2jEyQOt1LG6JkGJCCIFotzmlcCZFur2wdKrp1JX2cNotC7Ae0BcD/4lLv3lUAArM9uNS8z/fsvXTd0L71g==",
|
||||
"version": "16.3.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.3.1.tgz",
|
||||
"integrity": "sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.4.0",
|
||||
|
@ -1845,6 +1857,7 @@
|
|||
"eslint-plugin-es-x": "^7.1.0",
|
||||
"get-tsconfig": "^4.7.0",
|
||||
"ignore": "^5.2.4",
|
||||
"is-builtin-module": "^3.2.1",
|
||||
"is-core-module": "^2.12.1",
|
||||
"minimatch": "^3.1.2",
|
||||
"resolve": "^1.22.2",
|
||||
|
@ -2423,9 +2436,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/globals": {
|
||||
"version": "13.21.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz",
|
||||
"integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==",
|
||||
"version": "13.23.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
|
||||
"integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"type-fest": "^0.20.2"
|
||||
|
@ -2884,6 +2897,21 @@
|
|||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/is-builtin-module": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
|
||||
"integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"builtin-modules": "^3.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/is-callable": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
|
||||
|
@ -3366,9 +3394,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/luxon": {
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
|
||||
"integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==",
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
|
||||
"integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
|
@ -4460,9 +4488,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/punycode": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
||||
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
||||
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
|
@ -5950,9 +5978,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"@eslint/eslintrc": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
|
||||
"integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
|
||||
"integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^6.12.4",
|
||||
|
@ -5967,9 +5995,9 @@
|
|||
}
|
||||
},
|
||||
"@eslint/js": {
|
||||
"version": "8.52.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz",
|
||||
"integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==",
|
||||
"version": "8.53.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
|
||||
"integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
|
||||
"dev": true
|
||||
},
|
||||
"@faker-js/faker": {
|
||||
|
@ -6318,9 +6346,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"acorn": {
|
||||
"version": "8.10.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
|
||||
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
|
||||
"version": "8.11.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
|
||||
"integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
|
||||
"dev": true
|
||||
},
|
||||
"acorn-jsx": {
|
||||
|
@ -6598,6 +6626,12 @@
|
|||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
||||
"dev": true
|
||||
},
|
||||
"builtin-modules": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
|
||||
"integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
|
||||
"dev": true
|
||||
},
|
||||
"builtins": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
|
||||
|
@ -7090,15 +7124,15 @@
|
|||
"dev": true
|
||||
},
|
||||
"eslint": {
|
||||
"version": "8.52.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz",
|
||||
"integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==",
|
||||
"version": "8.53.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
|
||||
"integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.6.1",
|
||||
"@eslint/eslintrc": "^2.1.2",
|
||||
"@eslint/js": "8.52.0",
|
||||
"@eslint/eslintrc": "^2.1.3",
|
||||
"@eslint/js": "8.53.0",
|
||||
"@humanwhocodes/config-array": "^0.11.13",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
"@nodelib/fs.walk": "^1.2.8",
|
||||
|
@ -7246,9 +7280,9 @@
|
|||
}
|
||||
},
|
||||
"eslint-plugin-n": {
|
||||
"version": "16.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.2.0.tgz",
|
||||
"integrity": "sha512-AQER2jEyQOt1LG6JkGJCCIFotzmlcCZFur2wdKrp1JX2cNotC7Ae0BcD/4lLv3lUAArM9uNS8z/fsvXTd0L71g==",
|
||||
"version": "16.3.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.3.1.tgz",
|
||||
"integrity": "sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@eslint-community/eslint-utils": "^4.4.0",
|
||||
|
@ -7256,6 +7290,7 @@
|
|||
"eslint-plugin-es-x": "^7.1.0",
|
||||
"get-tsconfig": "^4.7.0",
|
||||
"ignore": "^5.2.4",
|
||||
"is-builtin-module": "^3.2.1",
|
||||
"is-core-module": "^2.12.1",
|
||||
"minimatch": "^3.1.2",
|
||||
"resolve": "^1.22.2",
|
||||
|
@ -7665,9 +7700,9 @@
|
|||
}
|
||||
},
|
||||
"globals": {
|
||||
"version": "13.21.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz",
|
||||
"integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==",
|
||||
"version": "13.23.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
|
||||
"integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"type-fest": "^0.20.2"
|
||||
|
@ -8004,6 +8039,15 @@
|
|||
"has-tostringtag": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"is-builtin-module": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
|
||||
"integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"builtin-modules": "^3.3.0"
|
||||
}
|
||||
},
|
||||
"is-callable": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
|
||||
|
@ -8346,9 +8390,9 @@
|
|||
}
|
||||
},
|
||||
"luxon": {
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
|
||||
"integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg=="
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
|
||||
"integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA=="
|
||||
},
|
||||
"make-fetch-happen": {
|
||||
"version": "11.1.1",
|
||||
|
@ -9148,9 +9192,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"punycode": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
||||
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
||||
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
||||
"dev": true
|
||||
},
|
||||
"pupa": {
|
||||
|
|
|
@ -8,10 +8,10 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "1.39.0",
|
||||
"eslint": "8.52.0",
|
||||
"eslint": "8.53.0",
|
||||
"eslint-config-standard": "17.1.0",
|
||||
"eslint-plugin-import": "2.29.0",
|
||||
"eslint-plugin-n": "16.2.0",
|
||||
"eslint-plugin-n": "16.3.1",
|
||||
"eslint-plugin-node": "11.1.0",
|
||||
"eslint-plugin-promise": "6.1.1",
|
||||
"npm-check-updates": "16.14.6"
|
||||
|
@ -20,7 +20,7 @@
|
|||
"@faker-js/faker": "8.2.0",
|
||||
"lodash": "4.17.21",
|
||||
"lodash-es": "4.17.21",
|
||||
"luxon": "3.4.3",
|
||||
"luxon": "3.4.4",
|
||||
"ms": "2.1.3",
|
||||
"seedrandom": "3.0.5",
|
||||
"slugify": "1.6.6"
|
||||
|
|
|
@ -1427,27 +1427,34 @@ test.describe('past - small screens', () => {
|
|||
|
||||
// has a bottom mobile bar
|
||||
await expect(page.locator('.agenda-mobile-bar')).toBeVisible()
|
||||
await expect(barBtnLocator).toHaveCount(4)
|
||||
await expect(barBtnLocator.first()).toContainText('Filters')
|
||||
await expect(barBtnLocator.nth(1)).toContainText('Cal')
|
||||
await expect(barBtnLocator.nth(2)).toContainText('.ics')
|
||||
await expect(barBtnLocator.last().locator('> *')).toHaveCount(1)
|
||||
await expect(barBtnLocator.last().locator('> *')).toHaveClass(/bi/)
|
||||
await expect(barBtnLocator).toHaveCount(5)
|
||||
|
||||
// can open the jump to day dropdown
|
||||
await barBtnLocator.first().click()
|
||||
const jumpDayDdnLocator = page.locator('.n-dropdown-menu > .n-dropdown-option')
|
||||
await expect(jumpDayDdnLocator).toHaveCount(7)
|
||||
for (let idx = 0; idx < 7; idx++) {
|
||||
const localDateTime = DateTime.fromISO(meetingData.meeting.startDate, { zone: meetingData.meeting.timezone })
|
||||
.setLocale(BROWSER_LOCALE)
|
||||
.plus({ days: idx })
|
||||
.toFormat('ccc LLL d')
|
||||
await expect(jumpDayDdnLocator.nth(idx)).toContainText(`Jump to ${localDateTime}`)
|
||||
}
|
||||
|
||||
// can open the filters overlay
|
||||
await barBtnLocator.first().click()
|
||||
await barBtnLocator.nth(1).click()
|
||||
await expect(page.locator('.agenda-personalize')).toBeVisible()
|
||||
await page.locator('.agenda-personalize .agenda-personalize-actions > button').nth(1).click()
|
||||
await expect(page.locator('.agenda-personalize')).toBeHidden()
|
||||
|
||||
// can open the calendar view
|
||||
await barBtnLocator.nth(1).click()
|
||||
await barBtnLocator.nth(2).click()
|
||||
await expect(page.locator('.agenda-calendar')).toBeVisible()
|
||||
await page.locator('.agenda-calendar .agenda-calendar-actions > button').nth(1).click()
|
||||
await expect(page.locator('.agenda-calendar')).toBeHidden()
|
||||
|
||||
// can open the ics dropdown
|
||||
await barBtnLocator.nth(2).click()
|
||||
await barBtnLocator.nth(3).click()
|
||||
const calDdnLocator = page.locator('.n-dropdown-menu > .n-dropdown-option')
|
||||
await expect(calDdnLocator).toHaveCount(2)
|
||||
await expect(calDdnLocator.first()).toContainText('Subscribe')
|
||||
|
|
|
@ -65,12 +65,12 @@ types-requests>=2.27.1
|
|||
requests-mock>=1.9.3
|
||||
rfc2html>=2.0.3
|
||||
scout-apm>=2.24.2
|
||||
selenium>=3.141.0,<4.0
|
||||
selenium>=4.0
|
||||
tblib>=1.7.0 # So that the django test runner provides tracebacks
|
||||
tlds>=2022042700 # Used to teach bleach about which TLDs currently exist
|
||||
tqdm>=4.64.0
|
||||
Unidecode>=1.3.4
|
||||
urllib3<2 # v2 causes selenium tests to fail with "Timeout value was <object..." error
|
||||
urllib3>=2
|
||||
weasyprint>=59
|
||||
xml2rfc>=3.12.4
|
||||
xym>=0.6,<1.0
|
||||
|
|
Loading…
Reference in a new issue