Skip to content

Commit

Permalink
feat: cumulative values in PT (DHIS2-5497) (#2746)
Browse files Browse the repository at this point in the history
* chore(deps): bump tar from 4.4.13 to 4.4.19 (#1946)

Bumps [tar](https://github.com/npm/node-tar) from 4.4.13 to 4.4.19.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](isaacs/node-tar@v4.4.13...v4.4.19)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat: support non-gregorian fixed periods (#2233)

* feat: support non-gregorian fixed periods

* test: fix test failing due to change in single value behaviour

---------

Co-authored-by: Jan Henrik Øverland <janhenrik.overland@gmail.com>

* fix: dependency updates (#2243)

* fix: update cli-app-scripts and analytics deps

* chore: configure continuous delivery workflows (#2254)

There are 4 workflows:

verify PR (dhis2-verify-app.yml)
-- build, lint, test, e2e-prod

verify commit to dev (dhis2-verify-app.yml)
-- build, lint, test, e2e-prod, report-failure-to-slack

verify commit to master (dhis2-verify-app.yml)
-- build, lint, test, e2e-prod, release, report-failure-to-slack

nightly (nightly.yml)
-- e2e-dev, report-failure

In addition:

* e2e-prod and e2e-dev are reusable workflows and are called from dhis2-verify-app and nightly.
* removed uses: c-hive/gha-yarn-cache@v1 since it is deprecated and setup-node handles that work.
* updated action versions and node versions
* cypress test version tagging for features and bugs has been added (copied from line-list)

* feat: single value background color change based upon legend (DHIS2-13702) (#2223)

* feat: implement data icon option for SV visualization (DHIS2-10496) (#2236)

* fix: do not pass a boolean for icons when saving

If the option is not set, and thus its value is the same as the default
(false) remove it from the current object to avoid sending a boolean
value that the backend does not expect.
This was causing any save to return 500.

* fix: hide icon from visualization when option is toggled

This didn't work before because the icons option was removed from the
options object, but when the current object was merged with
the new options, it retained the original value.

* fix: fetch data element icon and pass it in extraOptions

This is needed for SV visualizations when the "Show data item icon"
options is checked and an icon is assigned to the dx dimension in the
maintenance app.
In that case the icon's SVG is fetched from the API and passed to the
visualization API in the extraOptions object.
The SVG generator embeds the icon in the SVG so it appears on the side
of the value.

* chore: manually bump deps (#2543)

* chore: upgrade cypress to v12 and adjust project to it

* chore: remove videos

* chore: switch test server to debug (test.e2e is broken/slow)

* chore: revert the test server changes and move to a separate PR

* test: refactor clickCheckbox to check/uncheckCheckbox

* test: add helper functions for totals options

* test: add tests for cumulativeValues option in PT

* refactor: allow non toggleable select to be disabled

* refactor: allow checkbox options to be disabled

* feat: disable option when cumulativeValues is checked in PT DHiS2-15728

* refactor: add helper text when used in PT DHIS2-15727

* feat: disabled options based on cumulativeValues in PT DHIS2-15728

* chore: update pot file

* feat: handle disabled option in Redux store

* refactor: revert changes to option components

* feat: handle disabled and helpText props for disabled options

* refactor: avoid extra prop and detect visType internally

* feat: remove disabled before passing object to visualization generator

* refactor: remove unnecessary code

* refactor: streamlined code

* fix: set disabledOptions on AO loading and vis type switching

* fix: fix bug which cause current to loose props

* chore: update pot file

* refactor: rename variable for clarity

* chore: fix rebase conflict resolutions

* fix: avoid crash when visualization object is empty (ie. New)

* refactor: allow disabled to be passed as prop

* refactor: allow legend related option to be disabled

* feat: disable legend option when cumulative values is enabled

* refactor: add styles for titles of disabled sections

* chore: regenerate pot file

* fix: avoid visualization flashing when changing options

Move the filtering of disabled options in the plugin, which is needed
anyway to have the visualization looking the same also in dashboards.

* refactor: simplify code for passing displayProperty

* refactor: avoid involuntary changes to current in Redux store

We still need to clone the object, and use it also for the various
checks on options.

* test: enhance tests, options and sorting

* test: use current year instead of hardcode it

* chore: use alpha version of analytics

* docs: add PT to the list of vis types for cumulative values

* chore: fix linting error

* chore(analytics): add support for cumulative values

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mozafar <kabaros@gmail.com>
Co-authored-by: Jan Henrik Øverland <janhenrik.overland@gmail.com>
Co-authored-by: Jen Jones Arnesen <jennifer@dhis2.org>
Co-authored-by: Martin <martin@moid.se>
Co-authored-by: HendrikThePendric <hendrik@dhis2.org>
  • Loading branch information
7 people committed Dec 14, 2023
1 parent 65441f2 commit bff69ab
Show file tree
Hide file tree
Showing 41 changed files with 680 additions and 128 deletions.
9 changes: 8 additions & 1 deletion cypress/elements/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,16 @@ const loadingEl = 'dhis2-uicore-circularloader'
export const expectAppToNotBeLoading = () =>
cy.getBySel(loadingEl, { timeout: 15000 }).should('not.exist')

export const clickCheckbox = (target) =>
export const checkCheckbox = (target) =>
cy.getBySel(target).click().find('[type="checkbox"]').should('be.checked')

export const uncheckCheckbox = (target) =>
cy
.getBySel(target)
.click()
.find('[type="checkbox"]')
.should('not.be.checked')

export const typeInput = (target, text) =>
cy.getBySel(target).find('input').type(text)

Expand Down
8 changes: 4 additions & 4 deletions cypress/elements/optionsModal/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,19 +51,19 @@ export {
} from './axes.js'

export {
clickTrendLineCheckbox,
checkTrendLineCheckbox,
selectTrendLineType,
clickTargetLineCheckbox,
checkTargetLineCheckbox,
setTargetLineValue,
setTargetLineLabel,
clickBaseLineCheckbox,
checkBaseLineCheckbox,
setBaseLineLabel,
setBaseLineValue,
} from './lines.js'

export { setCustomSubtitle } from './subtitle.js'

export { clickOutliersCheckbox } from './outliers.js'
export { checkOutliersCheckbox } from './outliers.js'

export { setItemToAxis, setItemToType } from './series.js'

Expand Down
8 changes: 4 additions & 4 deletions cypress/elements/optionsModal/lines.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { clickCheckbox, typeInput } from '../common.js'
import { checkCheckbox, typeInput } from '../common.js'

const trendLineCheckboxEl = 'option-trend-line-checkbox'
const trendLineSelectEl = 'option-trend-line-select'
Expand All @@ -10,22 +10,22 @@ const baseLineCheckboxEl = 'option-base-line-checkbox'
const baseLineValueInputEl = 'option-base-line-value-input'
const baseLineLabelInputEl = 'option-base-line-label-input'

export const clickTrendLineCheckbox = () => clickCheckbox(trendLineCheckboxEl)
export const checkTrendLineCheckbox = () => checkCheckbox(trendLineCheckboxEl)

export const selectTrendLineType = (optionName) => {
cy.getBySel(trendLineSelectEl).findBySel('dhis2-uicore-select').click()
cy.getBySel(trendLineSelectOptionEl).contains(optionName).click()
}

export const clickTargetLineCheckbox = () => clickCheckbox(targetLineCheckboxEl)
export const checkTargetLineCheckbox = () => checkCheckbox(targetLineCheckboxEl)

export const setTargetLineValue = (text) =>
typeInput(targetLineValueInputEl, text)

export const setTargetLineLabel = (text) =>
typeInput(targetLineLabelInputEl, text)

export const clickBaseLineCheckbox = () => clickCheckbox(baseLineCheckboxEl)
export const checkBaseLineCheckbox = () => checkCheckbox(baseLineCheckboxEl)

export const setBaseLineValue = (text) => typeInput(baseLineValueInputEl, text)

Expand Down
4 changes: 2 additions & 2 deletions cypress/elements/optionsModal/outliers.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { clickCheckbox } from '../common.js'
import { checkCheckbox } from '../common.js'

const outliersCheckboxEl = 'option-outliers-enabled-checkbox'

export const clickOutliersCheckbox = () => clickCheckbox(outliersCheckboxEl)
export const checkOutliersCheckbox = () => checkCheckbox(outliersCheckboxEl)
100 changes: 100 additions & 0 deletions cypress/elements/optionsModal/totals.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
export const colTotalsOptionEl = 'option-col-totals'
const colSubTotalsOptionEl = 'option-col-subtotals'
const rowTotalsOptionEl = 'option-row-totals'
const rowSubTotalsOptionEl = 'option-row-subtotals'

export const expectColumnsTotalsToBeDisabled = () =>
cy
.getBySel(colTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.disabled')

export const expectColumnsTotalsToBeEnabled = () =>
cy
.getBySel(colTotalsOptionEl)
.find('[type="checkbox"]')
.should('not.be.disabled')

export const expectColumnsTotalsToBeChecked = () =>
cy
.getBySel(colTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.checked')

export const expectColumnsTotalsToBeUnchecked = () =>
cy
.getBySel(colTotalsOptionEl)
.find('[type="checkbox"]')
.should('not.be.checked')

export const expectColumnsSubTotalsToBeDisabled = () =>
cy
.getBySel(colSubTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.disabled')

export const expectColumnsSubTotalsToBeEnabled = () =>
cy
.getBySel(colSubTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.enabled')

export const expectColumnsSubTotalsToBeChecked = () =>
cy
.getBySel(colSubTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.checked')

export const expectColumnsSubTotalsToBeUnchecked = () =>
cy
.getBySel(colSubTotalsOptionEl)
.find('[type="checkbox"]')
.should('not.be.checked')

export const expectRowsTotalsToBeDisabled = () =>
cy
.getBySel(rowTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.disabled')

export const expectRowsTotalsToBeEnabled = () =>
cy
.getBySel(rowTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.enabled')

export const expectRowsTotalsToBeChecked = () =>
cy
.getBySel(rowTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.checked')

export const expectRowsTotalsToBeUnchecked = () =>
cy
.getBySel(rowTotalsOptionEl)
.find('[type="checkbox"]')
.should('not.be.checked')

export const expectRowsSubTotalsToBeDisabled = () =>
cy
.getBySel(rowSubTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.disabled')

export const expectRowsSubTotalsToBeEnabled = () =>
cy
.getBySel(rowSubTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.enabled')

export const expectRowsSubTotalsToBeChecked = () =>
cy
.getBySel(rowSubTotalsOptionEl)
.find('[type="checkbox"]')
.should('be.checked')

export const expectRowsSubTotalsToBeUnchecked = () =>
cy
.getBySel(rowSubTotalsOptionEl)
.find('[type="checkbox"]')
.should('not.be.checked')
7 changes: 7 additions & 0 deletions cypress/elements/pivotTable.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
const valueCellEl = 'visualization-value-cell'
const headerCellEl = 'visualization-column-header'

export const clickTableValueCell = (index) =>
cy.getBySel(valueCellEl).eq(index).click()

export const expectTableValueCellsToHaveLength = (length) =>
cy.getBySel(valueCellEl).should('have.length', length)

export const expectTableValueCellToContainValue = (index, value) =>
cy.getBySel(valueCellEl).eq(index).contains(value)

export const clickTableHeaderCell = (name) =>
cy.getBySel(headerCellEl).contains(name).click()
Loading

0 comments on commit bff69ab

Please sign in to comment.