diff --git a/.github/workflows/dhis2-verify-app.yml b/.github/workflows/dhis2-verify-app.yml index 8f8613c0..dd4b4019 100644 --- a/.github/workflows/dhis2-verify-app.yml +++ b/.github/workflows/dhis2-verify-app.yml @@ -82,9 +82,31 @@ jobs: - name: Lint run: yarn lint + test: + runs-on: ubuntu-latest + needs: lint + if: "!contains(github.event.head_commit.message, '[skip ci]')" + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 12.x + + - uses: actions/cache@v2 + id: yarn-cache + with: + path: '**/node_modules' + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + + - name: Test + run: yarn d2-app-scripts test --coverage + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v1 + publish: runs-on: ubuntu-latest - needs: [build, lint] + needs: [build, lint, test] if: "!contains(github.event.head_commit.message, '[skip ci]')" steps: - uses: actions/checkout@v2 diff --git a/package.json b/package.json index 765e071b..0d18d65e 100644 --- a/package.json +++ b/package.json @@ -36,5 +36,10 @@ }, "resolutions": { "@dhis2/ui": "^8.12.2" + }, + "jest": { + "collectCoverageFrom": [ + "src/**/*.js" + ] } } diff --git a/src/components/DownloadAs/use-hrefs.spec.js b/src/components/DownloadAs/use-hrefs.spec.js new file mode 100644 index 00000000..581ba803 --- /dev/null +++ b/src/components/DownloadAs/use-hrefs.spec.js @@ -0,0 +1,59 @@ +import useHrefs from './use-hrefs.js' + +jest.mock('@dhis2/app-runtime', () => ({ + useConfig: () => ({ + baseUrl: 'https://debug.dhis2.org/dev', + apiVersion: '41', + }), +})) + +describe('use-hrefs', () => { + const mockDate = 1694516945008 + + beforeEach(() => { + jest.spyOn(Date, 'now').mockReturnValueOnce(mockDate) + }) + + it('should generate correct urls', () => { + const result = useHrefs({ + endpoint: '/dataAnalysis/validationRules/report', + fileTypes: ['pdf', 'xls', 'csv'], + queryStr: undefined, + }) + expect(result.csv).toMatch( + `https://debug.dhis2.org/dev/api/41/dataAnalysis/validationRules/report.csv?t=${mockDate}` + ) + expect(result.pdf).toEqual( + `https://debug.dhis2.org/dev/api/41/dataAnalysis/validationRules/report.pdf?t=${mockDate}` + ) + expect(result.xls).toEqual( + `https://debug.dhis2.org/dev/api/41/dataAnalysis/validationRules/report.xls?t=${mockDate}` + ) + }) + it('should generate correct urls even if endpoint does not start with slash', () => { + const result = useHrefs({ + endpoint: 'dataAnalysis/validationRules/report', + fileTypes: ['pdf', 'xls', 'csv'], + queryStr: undefined, + }) + expect(result.csv).toMatch( + `https://debug.dhis2.org/dev/api/41/dataAnalysis/validationRules/report.csv?t=${mockDate}` + ) + expect(result.pdf).toEqual( + `https://debug.dhis2.org/dev/api/41/dataAnalysis/validationRules/report.pdf?t=${mockDate}` + ) + expect(result.xls).toEqual( + `https://debug.dhis2.org/dev/api/41/dataAnalysis/validationRules/report.xls?t=${mockDate}` + ) + }) + it('should generate correct urls even when passed query string', () => { + const result = useHrefs({ + endpoint: 'dataAnalysis/validationRules/report', + fileTypes: ['pdf', 'xls', 'csv'], + queryStr: 'locale=fr', + }) + expect(result.csv).toMatch( + 'https://debug.dhis2.org/dev/api/41/dataAnalysis/validationRules/report.csv?locale=fr' + ) + }) +})