Compare commits

...

73 Commits
v6.9.0 ... main

Author SHA1 Message Date
semantic-release-bot
c6a1c53b46 chore(release): 6.13.0 [skip ci]
# [6.13.0](https://git.datacontroller.io/dc/dc/compare/v6.12.3...v6.13.0) (2025-01-31)

### Bug Fixes

* editor page csv upload ([217220f](217220ffaa))

### Features

* csv test ([c53ab85](c53ab85107))
2025-01-31 17:18:34 +00:00
e36229e4c4 Merge pull request 'issue-136' (#139) from issue-136 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 5m6s
Release / Build-and-test-development (push) Successful in 9m56s
Release / release (push) Successful in 10m28s
Reviewed-on: #139
2025-01-31 16:58:51 +00:00
Mihajlo Medjedovic
853c1bc23e chore: cypress csv test fix
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 5m28s
Build / Build-and-test-development (pull_request) Successful in 10m1s
2025-01-31 17:25:12 +01:00
Mihajlo Medjedovic
3b6f6853bc chore: cypress fix
Some checks failed
Build / Build-and-ng-test (pull_request) Successful in 5m2s
Build / Build-and-test-development (pull_request) Failing after 9m55s
2025-01-31 16:37:15 +01:00
Mihajlo Medjedovic
b415437662 chore: package-lock fix
Some checks failed
Build / Build-and-ng-test (pull_request) Successful in 5m18s
Build / Build-and-test-development (pull_request) Has been cancelled
2025-01-31 15:56:58 +01:00
Mihajlo Medjedovic
24df878abe ci: fix
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m5s
Build / Build-and-test-development (pull_request) Failing after 1m6s
2025-01-31 15:53:59 +01:00
Mihajlo Medjedovic
f474673a14 chore: package-lock.json
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m1s
2025-01-31 11:42:25 +01:00
Mihajlo Medjedovic
c53ab85107 feat: csv test
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m7s
2025-01-31 11:19:48 +01:00
Mihajlo Medjedovic
5c4dd7c9e3 style: lint
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m8s
2025-01-30 16:25:47 +01:00
Mihajlo Medjedovic
217220ffaa fix: editor page csv upload 2025-01-30 16:25:18 +01:00
semantic-release-bot
c89a3049fa chore(release): 6.12.3 [skip ci]
## [6.12.3](https://git.datacontroller.io/dc/dc/compare/v6.12.2...v6.12.3) (2025-01-27)

### Bug Fixes

* adding missing=STRING to three services ([30d5e51](30d5e51d0b))
2025-01-27 15:18:30 +00:00
bb12bff9db Merge pull request 'fix: adding missing=STRING to three services' (#138) from issue137 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 4m58s
Release / Build-and-test-development (push) Successful in 9m36s
Release / release (push) Successful in 10m29s
Reviewed-on: #138
2025-01-27 14:59:19 +00:00
Allan
30d5e51d0b fix: adding missing=STRING to three services
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 5m8s
This results in the use of data step instead of proc json in the mp_jsonout macro - which results in the correct management of latin1 encoded characters in utf-8 output
2025-01-27 14:51:17 +00:00
semantic-release-bot
cd3bcc0ee3 chore(release): 6.12.2 [skip ci]
## [6.12.2](https://git.datacontroller.io/dc/dc/compare/v6.12.1...v6.12.2) (2025-01-27)

### Bug Fixes

* unnecessary zeros when adding new row (data schema default values) ([a1a9051](a1a90519c5))
2025-01-27 11:30:01 +00:00
ef1ba824c3 Merge pull request 'Unnecessary zeros when adding new row (data schema default values)' (#132) from issue-131 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 5m7s
Release / Build-and-test-development (push) Successful in 9m40s
Release / release (push) Successful in 10m31s
Reviewed-on: #132
2025-01-27 11:10:32 +00:00
bc45e92138 Merge branch 'main' into issue-131
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 5m38s
2025-01-27 11:04:33 +00:00
semantic-release-bot
c2f36f5419 chore(release): 6.12.1 [skip ci]
## [6.12.1](https://git.datacontroller.io/dc/dc/compare/v6.12.0...v6.12.1) (2024-12-31)

### Bug Fixes

* no upcase of pk fields in MPE_TABLES in delete scenario ([3de095f](3de095fe77)), closes [#134](#134)
* reduce length of tmp table names.  Closes [#130](#130) ([f9c2491](f9c2491ab6))
2024-12-31 15:52:37 +00:00
31a31612fc Merge pull request 'fix: no upcase of pk fields in MPE_TABLES in delete scenario' (#135) from issue134 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 4m47s
Release / Build-and-test-development (push) Successful in 9m5s
Release / release (push) Successful in 10m20s
Reviewed-on: #135
2024-12-31 15:26:21 +00:00
Allan
f9c2491ab6 fix: reduce length of tmp table names. Closes #130
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m55s
2024-12-31 15:25:37 +00:00
Allan
3de095fe77 fix: no upcase of pk fields in MPE_TABLES in delete scenario
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 5m3s
closes #134
2024-12-31 15:23:25 +00:00
Mihajlo Medjedovic
e4e04a193f chore: fixed tsconfig cypress and angular karma conflicts
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m13s
2024-09-27 14:05:43 +02:00
Mihajlo Medjedovic
a1a90519c5 fix: unnecessary zeros when adding new row (data schema default values)
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m59s
2024-09-27 13:36:50 +02:00
semantic-release-bot
522979835c chore(release): 6.12.0 [skip ci]
# [6.12.0](https://git.datacontroller.io/dc/dc/compare/v6.11.1...v6.12.0) (2024-09-02)

### Bug Fixes

* added appLoc to the system page ([dd2138a](dd2138ac5e))
* bumping core for passthrough fix, [#124](#124) ([caa9854](caa9854ff0))
* excel with password flow, introducing web worker for XLSX.read ([a3ce367](a3ce367950))
* implemented the new request wrapper usage, added XLSX read with a Web Worker, multi load preview data, full height ([4218da9](4218da91cd))
* **multi load:** xlsx read file ahead of time, while user choose datasets ([6547461](6547461637))
* refactored adapter request wrapper function to return job log as well ([67436f4](67436f4ff9))
* using temporary names for temporary tables ([ce50365](ce503653cd)), closes [#124](#124)

### Features

* searching data in excel files using new algorithm (massive performance improvement) ([bbb725c](bbb725c64c))
2024-09-02 07:50:00 +00:00
fe049256b5 Merge pull request 'Multi Load Tests Fix (timing issues)' (#126) from multi-load-tests into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 3m54s
Release / Build-and-test-development (push) Successful in 8m3s
Release / release (push) Successful in 8m24s
Reviewed-on: #126
2024-09-02 07:30:55 +00:00
Mihajlo Medjedovic
31d1870198 chore: removed log
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m2s
2024-09-02 09:29:48 +02:00
Mihajlo Medjedovic
6edf0dfb31 chore: multi load test fix (timing issues) 2024-09-02 09:29:22 +02:00
3bf3dceaa2 Merge pull request 'feat: searching data in excel files using new algorithm (massive performance improvement)' (#123) from issue-120 into main
Some checks failed
Release / Build-production-and-ng-test (push) Successful in 4m3s
Release / Build-and-test-development (push) Failing after 8m4s
Release / release (push) Has been skipped
Reviewed-on: #123
2024-08-31 14:23:48 +00:00
allan
ce503653cd fix: using temporary names for temporary tables
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m6s
Closes #124
2024-08-31 16:19:04 +02:00
allan
caa9854ff0 fix: bumping core for passthrough fix, #124 2024-08-31 16:06:46 +02:00
Mihajlo Medjedovic
20c3a338c5 style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m58s
2024-08-12 10:33:54 +02:00
Mihajlo Medjedovic
6547461637 fix(multi load): xlsx read file ahead of time, while user choose datasets
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 44s
2024-08-09 16:09:53 +02:00
Mihajlo Medjedovic
bbb725c64c feat: searching data in excel files using new algorithm (massive performance improvement)
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 45s
2024-08-07 17:53:52 +02:00
403d08c86a Merge pull request 'XLSX Performance Improvements (multi load)' (#118) from multi-load-performance into main
Some checks failed
Release / Build-production-and-ng-test (push) Successful in 3m55s
Release / Build-and-test-development (push) Failing after 8m2s
Release / release (push) Has been skipped
Reviewed-on: #118
2024-07-26 11:34:20 +00:00
Mihajlo Medjedovic
f66d9f511a chore(git): Merge branch 'multi-load-performance' of ssh://git.datacontroller.io:29419/dc/dc into multi-load-performance
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m58s
2024-07-08 10:15:38 +02:00
Mihajlo Medjedovic
dd2138ac5e fix: added appLoc to the system page 2024-07-08 10:15:24 +02:00
74e9979c67 Merge branch 'main' into multi-load-performance
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m58s
2024-07-05 13:46:47 +00:00
Mihajlo Medjedovic
ddc22e5200 style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m54s
2024-07-05 15:46:16 +02:00
Mihajlo Medjedovic
4218da91cd fix: implemented the new request wrapper usage, added XLSX read with a Web Worker, multi load preview data, full height
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 43s
2024-07-05 15:45:06 +02:00
Mihajlo Medjedovic
857b94f44f style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m58s
2024-07-03 18:01:01 +02:00
Mihajlo Medjedovic
a3ce367950 fix: excel with password flow, introducing web worker for XLSX.read 2024-07-03 18:00:41 +02:00
semantic-release-bot
75dac54591 chore(release): 6.11.1 [skip ci]
## [6.11.1](https://git.datacontroller.io/dc/dc/compare/v6.11.0...v6.11.1) (2024-07-02)

### Bug Fixes

* adding SYSSITE, part of [#116](#116) ([a156c01](a156c0111b))
* ensuring review_reason_txt in output.  Closes [#117](#117) ([e5d93fd](e5d93fd7d6))
2024-07-02 15:19:21 +00:00
a156c0111b fix: adding SYSSITE, part of #116
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 3m54s
Release / Build-and-test-development (push) Successful in 8m12s
Release / release (push) Successful in 8m25s
2024-07-02 16:03:26 +01:00
e5d93fd7d6 fix: ensuring review_reason_txt in output. Closes #117 2024-07-02 16:02:58 +01:00
Mihajlo Medjedovic
67436f4ff9 fix: refactored adapter request wrapper function to return job log as well 2024-07-02 15:54:59 +02:00
semantic-release-bot
b712f851a2 chore(release): 6.11.0 [skip ci]
# [6.11.0](https://git.datacontroller.io/dc/dc/compare/v6.10.1...v6.11.0) (2024-06-27)

### Bug Fixes

* addressing PR comments ([d94df7f](d94df7f0eb))
* **multi load:** fixed parsing algorithm reused for the multi load, the fix affects the normal upload as well. ([d4fee79](d4fee791a7))
* **multi load:** label rename ([fa04d7b](fa04d7bf4e))

### Features

* **multi load:** added HOT for user datasets input ([18363bb](18363bbbeb))
* **multi load:** implemented matching libds and parsing of the multiple sheets ([efcdc69](efcdc694dd))
* **multi load:** licence submit limits ([cffeab8](cffeab813d))
* **multi load:** multiple csv files ([4d27665](4d276657b3))
* **multi load:** refactored range find function, unlocking excel with password is reusable ([eb7c443](eb7c44333c))
* **multi load:** submitting multiple found tables at once ([5deba44](5deba44d2b))
2024-06-27 09:56:27 +00:00
e2c0b8da86 Merge pull request 'feat(multi load): refactored range find function, unlocking excel with password is reusable' (#115) from issue99 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 3m49s
Release / Build-and-test-development (push) Successful in 8m9s
Release / release (push) Successful in 8m27s
Reviewed-on: #115
Reviewed-by: yury <yury@4gl.io>
Reviewed-by: allan <allan@4gl.io>
2024-06-27 09:40:45 +00:00
Mihajlo Medjedovic
1b4560061d style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m52s
2024-06-27 11:07:30 +02:00
Mihajlo Medjedovic
d94df7f0eb fix: addressing PR comments
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 43s
2024-06-27 11:00:19 +02:00
Mihajlo Medjedovic
fa04d7bf4e fix(multi load): label rename
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m56s
2024-06-26 16:19:04 +02:00
Mihajlo Medjedovic
4d4cabb465 style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m53s
2024-06-26 16:14:53 +02:00
Mihajlo Medjedovic
d4fee791a7 fix(multi load): fixed parsing algorithm reused for the multi load, the fix affects the normal upload as well. 2024-06-26 16:14:35 +02:00
Mihajlo Medjedovic
82c285e348 style: lint 2024-06-24 15:36:55 +02:00
Mihajlo Medjedovic
4d276657b3 feat(multi load): multiple csv files 2024-06-24 15:36:06 +02:00
Mihajlo Medjedovic
cffeab813d feat(multi load): licence submit limits
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 42s
Icons improvement, ux improvements, matched dataset link to edit table, empty table is visible on the left
2024-06-21 14:23:13 +02:00
Mihajlo Medjedovic
18363bbbeb feat(multi load): added HOT for user datasets input
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 51s
2024-06-20 14:11:20 +02:00
Mihajlo Medjedovic
6df7d8d2ba style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m45s
2024-06-18 00:38:01 +02:00
Mihajlo Medjedovic
5deba44d2b feat(multi load): submitting multiple found tables at once 2024-06-18 00:37:41 +02:00
Mihajlo Medjedovic
0a8b1e764c chore(licence checker): handsontable 14.4.0
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m41s
2024-06-14 15:52:27 +02:00
Mihajlo Medjedovic
fc52e8f41a style: lint
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m29s
2024-06-14 15:46:35 +02:00
Mihajlo Medjedovic
efcdc694dd feat(multi load): implemented matching libds and parsing of the multiple sheets 2024-06-14 15:46:15 +02:00
Mihajlo Medjedovic
eb7c44333c feat(multi load): refactored range find function, unlocking excel with password is reusable
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 52s
2024-06-13 12:59:26 +02:00
semantic-release-bot
3c62ff6913 chore(release): 6.10.1 [skip ci]
## [6.10.1](https://git.datacontroller.io/dc/dc/compare/v6.10.0...v6.10.1) (2024-06-07)

### Bug Fixes

* adding 60 more colours to crayons table. Closes [#112](#112) ([3521579](3521579dea))
* terms and conditions colours, editor on smaller screens show only icons ([e32d44b](e32d44b1bc))
2024-06-07 15:46:58 +00:00
f4f589af94 Merge pull request 'fix: adding 60 more colours to crayons table. Closes #112' (#114) from issue112 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 4m41s
Release / Build-and-test-development (push) Successful in 8m42s
Release / release (push) Successful in 10m11s
Reviewed-on: #114
2024-06-07 15:29:09 +00:00
3521579dea fix: adding 60 more colours to crayons table. Closes #112
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m45s
2024-06-07 16:23:40 +01:00
e97a6f52da Merge pull request 'fix: terms and conditions colours, editor on smaller screens show only icons' (#113) from issue111 into main
Some checks failed
Release / Build-and-test-development (push) Has been cancelled
Release / release (push) Has been cancelled
Release / Build-production-and-ng-test (push) Has been cancelled
Reviewed-on: #113
2024-06-07 15:22:00 +00:00
Mihajlo Medjedovic
3584aa35c7 chore: package-locks
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m49s
2024-06-07 17:07:23 +02:00
Mihajlo Medjedovic
b553520abe style: lint, package-locks
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 55s
2024-06-07 16:58:04 +02:00
Mihajlo Medjedovic
e32d44b1bc fix: terms and conditions colours, editor on smaller screens show only icons
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 52s
2024-06-07 16:34:47 +02:00
semantic-release-bot
105da1503f chore(release): 6.10.0 [skip ci]
# [6.10.0](https://git.datacontroller.io/dc/dc/compare/v6.9.0...v6.10.0) (2024-06-07)

### Features

* updated handsontable to v14 ([2f8d0b7](2f8d0b764a))
2024-06-07 08:58:45 +00:00
29298072e5 Merge pull request 'feat: updated handsontable to v14' (#110) from handonstable-14 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 4m39s
Release / Build-and-test-development (push) Successful in 8m44s
Release / release (push) Successful in 10m9s
Reviewed-on: #110
2024-06-07 08:40:54 +00:00
Mihajlo Medjedovic
154c10fee5 chore: licence checker
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m50s
2024-06-07 09:45:10 +02:00
7853f7cb6a Merge branch 'main' into handonstable-14
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m32s
2024-05-31 11:39:14 +00:00
Mihajlo Medjedovic
2f8d0b764a feat: updated handsontable to v14
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m17s
2024-05-30 23:35:05 +02:00
107 changed files with 6263 additions and 4915 deletions

View File

@ -48,4 +48,94 @@ jobs:
- name: Production Build
run: |
cd client
npm run build
npm run build
Build-and-test-development:
runs-on: ubuntu-latest
needs: Build-production-and-ng-test
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v4
with:
node-version: 20.14.0
- name: Write .npmrc file
run: |
touch client/.npmrc
echo '${{ secrets.NPMRC}}' > client/.npmrc
- run: apt-get update
- run: wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
- run: apt install -y ./google-chrome*.deb;
- run: export CHROME_BIN=/usr/bin/google-chrome
- run: apt-get update -y
- run: apt-get -y install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb
- run: apt -y install jq
- name: Write cypress credentials
run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json
shell: bash
env:
CYPRESS_CREDS: ${{ secrets.CYPRESS_CREDS }}
- name: Install dependencies
run: |
cd client
# Decrypt and Install sheet
echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg
npm ci
# Install pm2 and prepare SASJS server
- run: npm i -g pm2
- run: curl -L https://github.com/sasjs/server/releases/latest/download/linux.zip > linux.zip
- run: unzip linux.zip
- run: touch .env
- run: echo RUN_TIMES=js >> .env
- run: echo NODE_PATH=node >> .env
- run: echo CORS=enable >> .env
- run: echo WHITELIST=http://localhost:4200 >> .env
- run: cat .env
- run: pm2 start api-linux --wait-ready
- name: Deploy mocked services
run: |
cd ./sas/mocks/sasjs
npm install -g @sasjs/cli
npm install -g replace-in-files-cli
sasjs cbd -t server-ci
# sasjs request services/admin/makedata -t server-ci -d ./deploy/makeData4GL.json -c ./deploy/requestConfig.json -o ./output.json
- name: Install ZIP
run: |
apt-get update
apt-get install zip
- name: Prepare and run frontend and cypress
run: |
cd ./client
mv ./cypress.env.example.json ./cypress.env.json
replace-in-files --regex='"username".*' --replacement='"username":"'${{ secrets.CYPRESS_USERNAME_SASJS }}'",' ./cypress.env.json
replace-in-files --regex='"password".*' --replacement='"password":"'${{ secrets.CYPRESS_PWD_SASJS }}'" ' ./cypress.env.json
cat ./cypress.env.json
npm run postinstall
# Prepare index.html to SASJS local
replace-in-files --regex='serverUrl=".*?"' --replacement='serverUrl="http://localhost:5000"' ./src/index.html
replace-in-files --regex='appLoc=".*?"' --replacement='appLoc="/Public/app/devtest"' ./src/index.html
replace-in-files --regex='serverType=".*?"' --replacement='serverType="SASJS"' ./src/index.html
replace-in-files --regex='"hosturl".*' --replacement='hosturl:"http://localhost:4200",' ./cypress.config.ts
cat ./cypress.config.ts
# Start frontend and run cypress
npm start & npx wait-on http://localhost:4200 && npx cypress run --browser chrome --spec "cypress/e2e/liveness.cy.ts,cypress/e2e/editor.cy.ts,cypress/e2e/excel-multi-load.cy.ts,cypress/e2e/excel.cy.ts,cypress/e2e/csv.cy.ts,cypress/e2e/filtering.cy.ts,cypress/e2e/licensing.cy.ts"
- name: Zip Cypress videos
if: always()
run: |
zip -r cypress-videos ./client/cypress/videos
- name: Add cypress videos artifacts
if: always()
uses: actions/upload-artifact@v3
with:
name: cypress-videos.zip
path: cypress-videos.zip

View File

@ -136,7 +136,7 @@ jobs:
replace-in-files --regex='"hosturl".*' --replacement='hosturl:"http://localhost:4200",' ./cypress.config.ts
cat ./cypress.config.ts
# Start frontend and run cypress
npm start & npx wait-on http://localhost:4200 && npx cypress run --browser chrome --spec "cypress/e2e/liveness.cy.ts,cypress/e2e/editor.cy.ts,cypress/e2e/excel.cy.ts,cypress/e2e/filtering.cy.ts,cypress/e2e/licensing.cy.ts"
npm start & npx wait-on http://localhost:4200 && npx cypress run --browser chrome --spec "cypress/e2e/liveness.cy.ts,cypress/e2e/editor.cy.ts,cypress/e2e/excel-multi-load.cy.ts,cypress/e2e/excel.cy.ts,cypress/e2e/csv.cy.ts,cypress/e2e/filtering.cy.ts,cypress/e2e/licensing.cy.ts"
- name: Zip Cypress videos
if: always()

2
.gitignore vendored
View File

@ -11,7 +11,7 @@ client/cypress/screenshots
client/cypress/results
client/cypress/videos
client/documentation
client/sheet-crypto*
client/**/sheet-crypto.tgz
client/.nx
client/libraries/sheet-crypto.tgz
cypress.env.json

View File

@ -1,3 +1,97 @@
# [6.13.0](https://git.datacontroller.io/dc/dc/compare/v6.12.3...v6.13.0) (2025-01-31)
### Bug Fixes
* editor page csv upload ([217220f](https://git.datacontroller.io/dc/dc/commit/217220ffaaf688133321cc68d770aaf1e50590a9))
### Features
* csv test ([c53ab85](https://git.datacontroller.io/dc/dc/commit/c53ab85107f10c023117a099cc06321afc3e1f03))
## [6.12.3](https://git.datacontroller.io/dc/dc/compare/v6.12.2...v6.12.3) (2025-01-27)
### Bug Fixes
* adding missing=STRING to three services ([30d5e51](https://git.datacontroller.io/dc/dc/commit/30d5e51d0b9cf27774038476bd90559600952304))
## [6.12.2](https://git.datacontroller.io/dc/dc/compare/v6.12.1...v6.12.2) (2025-01-27)
### Bug Fixes
* unnecessary zeros when adding new row (data schema default values) ([a1a9051](https://git.datacontroller.io/dc/dc/commit/a1a90519c535ca25e00822b4d3358c991ac9662e))
## [6.12.1](https://git.datacontroller.io/dc/dc/compare/v6.12.0...v6.12.1) (2024-12-31)
### Bug Fixes
* no upcase of pk fields in MPE_TABLES in delete scenario ([3de095f](https://git.datacontroller.io/dc/dc/commit/3de095fe7797cde60f0e232c188305fe423c27eb)), closes [#134](https://git.datacontroller.io/dc/dc/issues/134)
* reduce length of tmp table names. Closes [#130](https://git.datacontroller.io/dc/dc/issues/130) ([f9c2491](https://git.datacontroller.io/dc/dc/commit/f9c2491ab6e7b528b7ffc011fd9e45c963c5f6bf))
# [6.12.0](https://git.datacontroller.io/dc/dc/compare/v6.11.1...v6.12.0) (2024-09-02)
### Bug Fixes
* added appLoc to the system page ([dd2138a](https://git.datacontroller.io/dc/dc/commit/dd2138ac5e6067de310e83d16fccc9b9764ba3ff))
* bumping core for passthrough fix, [#124](https://git.datacontroller.io/dc/dc/issues/124) ([caa9854](https://git.datacontroller.io/dc/dc/commit/caa9854ff0431ccbb6ff1d6d3509dc877362cceb))
* excel with password flow, introducing web worker for XLSX.read ([a3ce367](https://git.datacontroller.io/dc/dc/commit/a3ce36795007a4e3b6ac3499ffd119dc3758f387))
* implemented the new request wrapper usage, added XLSX read with a Web Worker, multi load preview data, full height ([4218da9](https://git.datacontroller.io/dc/dc/commit/4218da91cd193aa45346ad7e34ccc00ca89df4fb))
* **multi load:** xlsx read file ahead of time, while user choose datasets ([6547461](https://git.datacontroller.io/dc/dc/commit/65474616379e1dacc1329b3bdc5eb14f34428bb1))
* refactored adapter request wrapper function to return job log as well ([67436f4](https://git.datacontroller.io/dc/dc/commit/67436f4ff9bb4d77d5f897f47a3e3d472981f275))
* using temporary names for temporary tables ([ce50365](https://git.datacontroller.io/dc/dc/commit/ce503653cd9fc36f72fb172bd14816e07c792e14)), closes [#124](https://git.datacontroller.io/dc/dc/issues/124)
### Features
* searching data in excel files using new algorithm (massive performance improvement) ([bbb725c](https://git.datacontroller.io/dc/dc/commit/bbb725c64cc23ed701b189623992408c42fdde8f))
## [6.11.1](https://git.datacontroller.io/dc/dc/compare/v6.11.0...v6.11.1) (2024-07-02)
### Bug Fixes
* adding SYSSITE, part of [#116](https://git.datacontroller.io/dc/dc/issues/116) ([a156c01](https://git.datacontroller.io/dc/dc/commit/a156c0111b3de5e3744e38d377d6e9aa09915803))
* ensuring review_reason_txt in output. Closes [#117](https://git.datacontroller.io/dc/dc/issues/117) ([e5d93fd](https://git.datacontroller.io/dc/dc/commit/e5d93fd7d6d86bc47ff56664bd812b4d9d0749a5))
# [6.11.0](https://git.datacontroller.io/dc/dc/compare/v6.10.1...v6.11.0) (2024-06-27)
### Bug Fixes
* addressing PR comments ([d94df7f](https://git.datacontroller.io/dc/dc/commit/d94df7f0ebae8feab5e1d5cf8011af8c8be2ca18))
* **multi load:** fixed parsing algorithm reused for the multi load, the fix affects the normal upload as well. ([d4fee79](https://git.datacontroller.io/dc/dc/commit/d4fee791a72021e449cf9680c3e3a525dce41ac1))
* **multi load:** label rename ([fa04d7b](https://git.datacontroller.io/dc/dc/commit/fa04d7bf4e5ba337146bdaa926c60488f8851449))
### Features
* **multi load:** added HOT for user datasets input ([18363bb](https://git.datacontroller.io/dc/dc/commit/18363bbbeb9cf96183ba4841da8134b2f66f735c))
* **multi load:** implemented matching libds and parsing of the multiple sheets ([efcdc69](https://git.datacontroller.io/dc/dc/commit/efcdc694dd275cdb9a4e19f26e5522b8dadc5fd9))
* **multi load:** licence submit limits ([cffeab8](https://git.datacontroller.io/dc/dc/commit/cffeab813d8d4b324f82710dfd73953d4cbf8ffe))
* **multi load:** multiple csv files ([4d27665](https://git.datacontroller.io/dc/dc/commit/4d276657b35a147a2233a03afcb1716348555f52))
* **multi load:** refactored range find function, unlocking excel with password is reusable ([eb7c443](https://git.datacontroller.io/dc/dc/commit/eb7c44333c865e7f7bbfb54dd7f73bfc110f86a7))
* **multi load:** submitting multiple found tables at once ([5deba44](https://git.datacontroller.io/dc/dc/commit/5deba44d2b7352866d821b70dbbfbbf54955dc47))
## [6.10.1](https://git.datacontroller.io/dc/dc/compare/v6.10.0...v6.10.1) (2024-06-07)
### Bug Fixes
* adding 60 more colours to crayons table. Closes [#112](https://git.datacontroller.io/dc/dc/issues/112) ([3521579](https://git.datacontroller.io/dc/dc/commit/3521579dead089eebf62455686be3aee88bde687))
* terms and conditions colours, editor on smaller screens show only icons ([e32d44b](https://git.datacontroller.io/dc/dc/commit/e32d44b1bcdfeea43d19b21ec0ddf4af1ce3992a))
# [6.10.0](https://git.datacontroller.io/dc/dc/compare/v6.9.0...v6.10.0) (2024-06-07)
### Features
* updated handsontable to v14 ([2f8d0b7](https://git.datacontroller.io/dc/dc/commit/2f8d0b764a957ad8c11cd1088fad5e0670aa1731))
# [6.9.0](https://git.datacontroller.io/dc/dc/compare/v6.8.5...v6.9.0) (2024-05-31)

View File

@ -69,7 +69,8 @@
],
"scripts": [
"node_modules/marked/marked.min.js"
]
],
"webWorkerTsConfig": "tsconfig.worker.json"
},
"configurations": {
"production": {
@ -148,7 +149,8 @@
"src/styles.scss"
],
"scripts": [],
"karmaConfig": "karma.conf.js"
"karmaConfig": "karma.conf.js",
"webWorkerTsConfig": "tsconfig.worker.json"
}
},
"lint": {

View File

@ -0,0 +1,115 @@
import { Callbacks } from 'cypress/types/jquery/index'
const username = Cypress.env('username')
const password = Cypress.env('password')
const hostUrl = Cypress.env('hosturl')
const appLocation = Cypress.env('appLocation')
const longerCommandTimeout = Cypress.env('longerCommandTimeout')
const serverType = Cypress.env('serverType')
const libraryToOpenIncludes = Cypress.env(`libraryToOpenIncludes_${serverType}`)
const fixturePath = 'csvs/'
context('excel tests: ', function () {
this.beforeAll(() => {
cy.visit(`${hostUrl}/SASLogon/logout`)
cy.loginAndUpdateValidKey(true)
})
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
visitPage('home')
colorLog(
`TEST START ---> ${
Cypress.mocha.getRunner().suite.ctx.currentTest.title
}`,
'#3498DB'
)
})
it('1 | Uploads regular csv file', () => {
openTableFromTree(libraryToOpenIncludes, 'mpe_x_test')
attachExcelFile('regular.csv', () => {
cy.get('#approval-btn', { timeout: 60000 })
.should('be.visible')
// .then(() => {
// cy.get('#hotInstance', { timeout: 30000 })
// .find('div.ht_master.handsontable')
// .find('div.wtHolder')
// .find('div.wtHider')
// .find('div.wtSpreader')
// .find('table.htCore')
// .find('tbody')
// .then((data) => {
// let cell: any = data[0].children[0].children[1]
// expect(cell.innerText).to.equal('0')
// cell = data[0].children[0].children[2]
// expect(cell.innerText).to.equal('44')
// cell = data[0].children[0].children[3]
// expect(cell.innerText).to.equal('abc')
// cell = data[0].children[0].children[6]
// expect(cell.innerText).to.equal('Option abc')
// })
// })
})
})
this.afterEach(() => {
colorLog(`TEST END -------------`, '#3498DB')
})
})
const openTableFromTree = (libNameIncludes: string, tablename: string) => {
cy.get('.app-loading', { timeout: longerCommandTimeout })
.should('not.exist')
.then(() => {
cy.get('.nav-tree clr-tree > clr-tree-node', {
timeout: longerCommandTimeout
}).then((treeNodes: any) => {
let viyaLib
for (let node of treeNodes) {
if (node.innerText.toLowerCase().includes(libNameIncludes)) {
viyaLib = node
break
}
}
cy.get(viyaLib).within(() => {
cy.get('.clr-tree-node-content-container > button').click()
cy.get('.clr-treenode-link').then((innerNodes: any) => {
for (let innerNode of innerNodes) {
if (innerNode.innerText.toLowerCase().includes(tablename)) {
innerNode.click()
break
}
}
})
})
})
})
}
const attachExcelFile = (excelFilename: string, callback?: any) => {
cy.get('.buttonBar button:last-child')
.should('exist')
.click()
.then(() => {
cy.get('input[type="file"]#file-upload')
.attachFile(`/${fixturePath}/${excelFilename}`)
.then(() => {
if (callback) callback()
})
})
}
const visitPage = (url: string) => {
cy.visit(`${hostUrl}${appLocation}/#/${url}`)
}
const colorLog = (msg: string, color: string) => {
console.log('%c' + msg, 'color:' + color + ';font-weight:bold;')
}

View File

@ -15,9 +15,6 @@ context('editor tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})
@ -118,10 +115,6 @@ context('editor tests: ', function () {
})
})
})
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const clickOnEdit = (callback?: any) => {

View File

@ -0,0 +1,228 @@
import { Callbacks } from 'cypress/types/jquery/index'
const username = Cypress.env('username')
const password = Cypress.env('password')
const hostUrl = Cypress.env('hosturl')
const appLocation = Cypress.env('appLocation')
const longerCommandTimeout = Cypress.env('longerCommandTimeout')
const serverType = Cypress.env('serverType')
const libraryToOpenIncludes = Cypress.env(`libraryToOpenIncludes_${serverType}`)
const fixturePath = 'excels_multi_load/'
const library = 'DC996664'
const mpeXTestTable = 'MPE_X_TEST'
const mpeTablesTable = 'MPE_TABLES'
context('excel multi load tests: ', function () {
this.beforeAll(() => {
cy.visit(`${hostUrl}/SASLogon/logout`)
cy.loginAndUpdateValidKey(true)
})
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
visitPage('home/multi-load')
colorLog(
`TEST START ---> ${
Cypress.mocha.getRunner().suite.ctx.currentTest.title
}`,
'#3498DB'
)
})
it('1 | Uploads Excel file with multiple sheets, 3 sheets including data, 2 sheets matched with dataset', (done) => {
attachExcelFile('multi_load_test_2.xlsx', () => {
checkHotUserDatasetTable('hotTableUserDataset', [
[library, mpeXTestTable],
[library, mpeTablesTable]
], () => {
cy.get('#continue-btn').trigger('click').then(() => {
checkIfTreeHasTables([`${library}.${mpeXTestTable}`, `${library}.${mpeTablesTable}`], undefined, (includes: boolean) => {
if (includes) {
// MPE_TABLES sheet does not have data so 1 error image must be shown
hasErrorTables(1, (valid: boolean) => {
if (valid) done()
})
}
})
})
})
})
})
it('2 | Uploads Excel file with multiple sheets, 2 sheets matched with dataset, 1 matched sheet does not have data', (done) => {
attachExcelFile('multi_load_test_1.xlsx', () => {
checkHotUserDatasetTable('hotTableUserDataset', [
[library, mpeXTestTable],
[library, mpeTablesTable]
], () => {
cy.get('#continue-btn').trigger('click').then(() => {
checkIfTreeHasTables([`${library}.${mpeXTestTable}`, `${library}.${mpeTablesTable}`], `${library}.${mpeXTestTable}`, (includes: boolean) => {
if (includes) {
cy.get('#hotTable').should('be.visible').then(() => {
checkHotUserDatasetTable('hotTable', [
['No', '1', 'more dummy data'],
['No', '1', 'It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told:'],
['No', '1', 'if you can fill the unforgiving minute']
], () => {
submitTables()
hasSuccessSubmits(2, (valid: boolean) => {
if (valid) done()
})
})
})
}
})
})
})
})
})
it('3 | Uploads Excel file with multiple sheets, 1 sheets has 2 tables', (done) => {
attachExcelFile('multi_load_test_1.xlsx', () => {
checkHotUserDatasetTable('hotTableUserDataset', [
[library, mpeXTestTable],
[library, mpeTablesTable]
], () => {
cy.get('#continue-btn').trigger('click').then(() => {
checkIfTreeHasTables([`${library}.${mpeXTestTable}`, `${library}.${mpeTablesTable}`], `${library}.${mpeXTestTable}`, (includes: boolean) => {
if (includes) {
cy.get('#hotTable').should('be.visible').then(() => {
checkHotUserDatasetTable('hotTable', [
['No', '1', 'more dummy data'],
['No', '1', 'It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told:'],
['No', '1', 'if you can fill the unforgiving minute']
], () => {
clickOnTreeNode('DC996664.MPE_TABLES', () => {
cy.wait(1000).then(() => {
cy.get('#hotTable').should('be.visible').then(() => {
checkHotUserDatasetTable('hotTable', [
['No', 'DC914286', 'MPE_COLUMN_LEVEL_SECURITY'],
['No', 'DC914286', 'MPE_XLMAP_INFO'],
['No', 'DC914286', 'MPE_XLMAP_RULES']
], () => {
submitTables()
hasSuccessSubmits(2, (valid: boolean) => {
if (valid) done()
})
})
})
})
})
})
})
}
})
})
})
})
})
this.afterEach(() => {
colorLog(`TEST END -------------`, '#3498DB')
})
})
const attachExcelFile = (excelFilename: string, callback?: any) => {
cy.get('#browse-file')
.should('exist')
.click()
.then(() => {
cy.get('input[type="file"]#file-upload')
.attachFile(`/${fixturePath}/${excelFilename}`)
.then(() => {
if (callback) callback()
})
})
}
const checkHotUserDatasetTable = (hotId: string, dataToContain: any[][], callback?: () => void) => {
cy.get(`#${hotId}`, { timeout: longerCommandTimeout })
.find('div.ht_master.handsontable')
.find('div.wtHolder')
.find('div.wtHider')
.find('div.wtSpreader')
.find('table.htCore')
.find('tbody')
.then((data) => {
cy.wait(2000).then(() => {
for (let rowI = 0; rowI < dataToContain.length; rowI++) {
for (let colI = 0; colI < dataToContain[rowI].length; colI++) {
expect(data[0].children[rowI].children[colI]).to.contain(dataToContain[rowI][colI])
}
}
if (callback) callback()
})
})
}
const clickOnTreeNode = (clickOnNode: string, callback?: () => void) => {
cy.get('.nav-tree clr-tree > clr-tree-node').then((treeNodes: any) => {
for (let node of treeNodes) {
if (node.innerText.toUpperCase().trim().includes(clickOnNode)) {
cy.get(node).trigger('click')
if (callback) callback()
}
}
})
}
const checkIfTreeHasTables = (tables: string[], clickOnNode?: string, callback?: (includes: boolean) => void) => {
cy.get('.nav-tree clr-tree > clr-tree-node').then((treeNodes: any) => {
let datasets = tables
let nodesCorrect = true
let nodeToClick
for (let node of treeNodes) {
if (!datasets.includes(node.innerText.toUpperCase().trim())) {
nodesCorrect = false
}
if (clickOnNode) {
if (node.innerText.toUpperCase().trim().includes(clickOnNode)) {
nodeToClick = node
}
}
}
if (nodeToClick) {
cy.wait(1000)
cy.get(nodeToClick).trigger('click')
}
if (callback) callback(nodesCorrect)
})
}
const submitTables = () => {
cy.get('#submit-all').trigger('click')
cy.get('#submit-tables').trigger('click')
cy.wait(1000)
}
const hasSuccessSubmits = (expectedNoOfSubmits: number, callback: (valid: boolean) => void) => {
cy.get('.nav-tree clr-tree > clr-tree-node cds-icon[status="success"]').should('be.visible').then(($nodes) => {
callback(expectedNoOfSubmits === $nodes.length)
})
}
const hasErrorTables = (expectedNoOfErrors: number, callback: (valid: boolean) => void) => {
cy.get('.nav-tree clr-tree > clr-tree-node cds-icon[status="danger"]').should('be.visible').then(($nodes) => {
callback(expectedNoOfErrors === $nodes.length)
})
}
const visitPage = (url: string) => {
cy.visit(`${hostUrl}${appLocation}/#/${url}`)
}
const colorLog = (msg: string, color: string) => {
console.log('%c' + msg, 'color:' + color + ';font-weight:bold;')
}

View File

@ -17,9 +17,6 @@ context('excel tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
@ -112,13 +109,8 @@ context('excel tests: ', function () {
openTableFromTree(libraryToOpenIncludes, 'mpe_x_test')
attachExcelFile('duplicate_column_excel.xlsx', () => {
cy.get('.abortMsg', { timeout: longerCommandTimeout })
.should('exist')
.then((elements: any) => {
if (elements[0]) {
if (elements[0].innerText.toLowerCase().includes('missing')) done()
}
})
submitExcel()
rejectExcel(done)
})
})
@ -337,7 +329,6 @@ context('excel tests: ', function () {
this.afterEach(() => {
colorLog(`TEST END -------------`, '#3498DB')
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})

View File

@ -15,9 +15,7 @@ context('filtering tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation, { timeout: longerCommandTimeout })
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})
@ -174,10 +172,6 @@ context('filtering tests: ', function () {
// })
// })
// })
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const checkInfoBarIncludes = (text: string, callback: any) => {

View File

@ -23,15 +23,12 @@ interface EditConfigTableCells {
context('licensing tests: ', function () {
this.beforeAll(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
cy.loginAndUpdateValidKey()
})
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})
@ -375,9 +372,7 @@ context('licensing tests: ', function () {
})
}
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const logout = (callback?: any) => {

View File

@ -18,9 +18,6 @@ context('liveness tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})

View File

@ -16,7 +16,6 @@ context('editor tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
cy.wait(2000)
cy.get('body').then(($body) => {
@ -393,10 +392,6 @@ context('editor tests: ', function () {
// }
// )
// })
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const removeAllColumns = () => {

View File

@ -0,0 +1,497 @@
PRIMARY_KEY_FIELD,SOME_CHAR,SOME_DROPDOWN,SOME_NUM,SOME_DATE,SOME_DATETIME,SOME_TIME,SOME_SHORTNUM,SOME_BESTNUM
0,abc,Option abc,42,12FEB1960,01JAN1960:00:00:42,0:00:42,3,44
1,more dummy data,Option 2,42,12FEB1960,01JAN1960:00:00:42,0:07:02,3,44
2,even more dummy data,Option 3,42,12FEB1960,01JAN1960:00:00:42,0:02:22,3,44
3,"It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told:",Option 2,1613.001,27FEB1961,01JAN1960:00:07:03,0:00:44,3,44
4,if you can fill the unforgiving minute,Option 1,1613.0011235,02AUG1971,29MAY1973:06:12:03,0:06:52,3,44
1010,10 bottles of beer on the wall,Option 1,0.9153696885,04MAR1962,01JAN1960:12:47:55,0:01:40,92,76
1011,11 bottles of beer on the wall,Option 1,0.3531217558,29MAR1960,01JAN1960:03:33:24,0:01:03,80,29
1012,12 bottles of beer on the wall,Option 1,0.6743748717,02AUG1962,01JAN1960:07:25:59,0:00:10,16,98
1013,13 bottles of beer on the wall,Option 1,0.1305445992,11SEP1960,01JAN1960:13:51:32,0:00:35,73,15
1014,14 bottles of beer on the wall,Option 1,0.7409067949,26JUL1960,01JAN1960:05:18:10,0:00:41,30,89
1015,15 bottles of beer on the wall,Option 1,0.0869016028,28FEB1961,01JAN1960:13:23:45,0:00:44,80,3
1016,16 bottles of beer on the wall,Option 1,0.0462121419,09AUG1962,01JAN1960:07:42:38,0:01:17,62,2
1017,17 bottles of beer on the wall,Option 1,0.7501918947,14MAY1962,01JAN1960:04:40:20,0:00:15,53,65
1018,18 bottles of beer on the wall,Option 1,0.7300173294,03AUG1962,01JAN1960:03:20:41,0:00:41,21,60
1019,19 bottles of beer on the wall,Option 1,0.6960950437,01JUN1960,01JAN1960:01:58:52,0:01:08,38,5
1020,20 bottles of beer on the wall,Option 1,0.6190566065,30MAY1961,01JAN1960:09:04:20,0:01:07,92,23
1021,21 bottles of beer on the wall,Option 1,0.5173368238,07JAN1961,01JAN1960:07:52:34,0:00:52,57,21
1022,22 bottles of beer on the wall,Option 1,0.4720626452,07NOV1960,01JAN1960:12:12:00,0:00:26,53,32
1023,23 bottles of beer on the wall,Option 1,0.2856596393,08AUG1960,01JAN1960:06:09:25,0:00:28,40,12
1024,24 bottles of beer on the wall,Option 1,0.5160869418,02JUN1960,01JAN1960:06:36:06,0:01:10,41,81
1025,25 bottles of beer on the wall,Option 1,0.1683158517,05JAN1961,01JAN1960:08:14:35,0:00:06,18,53
1026,26 bottles of beer on the wall,Option 1,0.8951142248,28NOV1961,01JAN1960:03:31:17,0:00:58,79,54
1027,27 bottles of beer on the wall,Option 1,0.7037817481,01SEP1961,01JAN1960:05:48:34,0:00:29,50,15
1028,28 bottles of beer on the wall,Option 1,0.6193826714,31MAR1962,01JAN1960:02:49:39,0:00:24,78,87
1029,29 bottles of beer on the wall,Option 1,0.9339028457,06DEC1961,01JAN1960:02:57:57,0:00:24,73,64
1030,30 bottles of beer on the wall,Option 1,0.5647351339,10AUG1960,01JAN1960:11:02:59,0:00:55,39,28
1031,31 bottles of beer on the wall,Option 1,0.1218988607,19JUN1961,01JAN1960:04:19:32,0:00:58,51,32
1032,32 bottles of beer on the wall,Option 1,0.3459929113,14MAY1962,01JAN1960:05:42:48,0:00:54,96,46
1033,33 bottles of beer on the wall,Option 1,0.092664999,31AUG1962,01JAN1960:00:08:34,0:00:51,69,90
1034,34 bottles of beer on the wall,Option 1,0.9793458097,08FEB1960,01JAN1960:01:55:23,0:00:42,45,28
1035,35 bottles of beer on the wall,Option 1,0.8964386624,18DEC1961,01JAN1960:04:42:45,0:00:07,49,97
1036,36 bottles of beer on the wall,Option 1,0.0961652911,13NOV1960,01JAN1960:03:44:53,0:01:25,62,59
1037,37 bottles of beer on the wall,Option 1,0.3475089201,16JAN1962,01JAN1960:01:35:19,0:00:15,23,50
1038,38 bottles of beer on the wall,Option 1,0.3096271312,21MAY1960,01JAN1960:09:51:33,0:00:15,2,71
1039,39 bottles of beer on the wall,Option 1,0.9445223114,28AUG1962,01JAN1960:07:09:31,0:00:12,30,31
1040,40 bottles of beer on the wall,Option 1,0.5626084667,06NOV1960,01JAN1960:01:42:16,0:01:14,18,97
1041,41 bottles of beer on the wall,Option 1,0.9432962513,01JUN1962,01JAN1960:03:30:04,0:00:11,20,34
1042,42 bottles of beer on the wall,Option 1,0.5802429382,08JUL1961,01JAN1960:08:12:43,0:01:26,18,5
1043,43 bottles of beer on the wall,Option 1,0.1970176255,27MAR1961,01JAN1960:00:19:45,0:01:29,13,76
1044,44 bottles of beer on the wall,Option 1,0.4980671608,05JAN1961,01JAN1960:13:36:08,0:00:56,4,36
1045,45 bottles of beer on the wall,Option 1,0.2486515531,05MAY1962,01JAN1960:08:47:09,0:00:42,2,23
1046,46 bottles of beer on the wall,Option 1,0.4097825794,20JUN1960,01JAN1960:03:33:26,0:00:31,98,71
1047,47 bottles of beer on the wall,Option 1,0.138754441,28JAN1960,01JAN1960:00:57:41,0:00:18,80,32
1048,48 bottles of beer on the wall,Option 1,0.0249874415,03MAR1960,01JAN1960:11:33:53,0:00:04,96,76
1049,49 bottles of beer on the wall,Option 1,0.8395310011,06NOV1961,01JAN1960:09:54:04,0:00:52,28,45
1050,50 bottles of beer on the wall,Option 1,0.0942291618,14APR1962,01JAN1960:08:09:30,0:01:36,37,86
1051,51 bottles of beer on the wall,Option 1,0.1670458001,13NOV1961,01JAN1960:01:05:55,0:00:25,42,83
1052,52 bottles of beer on the wall,Option 1,0.3122402715,04JUN1960,01JAN1960:03:47:47,0:01:01,18,78
1053,53 bottles of beer on the wall,Option 1,0.3854694261,14JUN1960,01JAN1960:02:43:08,0:00:06,22,67
1054,54 bottles of beer on the wall,Option 1,0.1950434345,14NOV1961,01JAN1960:02:46:34,0:00:55,42,0
1055,55 bottles of beer on the wall,Option 1,0.4948673586,29MAR1962,01JAN1960:00:48:06,0:01:04,28,4
1056,56 bottles of beer on the wall,Option 1,0.6464513832,06SEP1962,01JAN1960:10:08:36,0:01:02,43,82
1057,57 bottles of beer on the wall,Option 1,0.0724864798,20JUN1961,01JAN1960:12:22:51,0:01:27,82,53
1058,58 bottles of beer on the wall,Option 1,0.8114467793,20MAR1962,01JAN1960:06:11:33,0:01:29,40,89
1059,59 bottles of beer on the wall,Option 1,0.6348024321,28JUN1962,01JAN1960:05:21:21,0:01:37,55,41
1060,60 bottles of beer on the wall,Option 1,0.8019492933,08APR1961,01JAN1960:12:37:00,0:01:29,49,88
1061,61 bottles of beer on the wall,Option 1,0.4695742002,29JAN1962,01JAN1960:08:54:24,0:00:15,40,91
1062,62 bottles of beer on the wall,Option 1,0.902706475,15JUN1961,01JAN1960:09:46:49,0:00:23,74,70
1063,63 bottles of beer on the wall,Option 1,0.4557614594,16JUL1961,01JAN1960:02:06:05,0:01:09,7,3
1064,64 bottles of beer on the wall,Option 1,0.6632444466,20MAY1961,01JAN1960:02:44:44,0:00:20,42,100
1065,65 bottles of beer on the wall,Option 1,0.3901674,31AUG1961,01JAN1960:07:56:49,0:00:32,98,3
1066,66 bottles of beer on the wall,Option 1,0.8453234848,30JUN1962,01JAN1960:04:51:54,0:01:02,51,22
1067,67 bottles of beer on the wall,Option 1,0.9370150906,26APR1960,01JAN1960:04:05:08,0:01:39,28,86
1068,68 bottles of beer on the wall,Option 1,0.8854161277,22MAR1962,01JAN1960:10:38:49,0:01:07,60,85
1069,69 bottles of beer on the wall,Option 1,0.1327841906,24MAY1960,01JAN1960:01:18:46,0:01:15,88,85
1070,70 bottles of beer on the wall,Option 1,0.5846563226,27JUL1962,01JAN1960:03:52:31,0:00:09,20,8
1071,71 bottles of beer on the wall,Option 1,0.0257193684,18FEB1961,01JAN1960:03:25:01,0:00:29,1,62
1072,72 bottles of beer on the wall,Option 1,0.9471486034,01JUN1962,01JAN1960:04:05:25,0:01:22,65,20
1073,73 bottles of beer on the wall,Option 1,0.3037446282,16MAY1962,01JAN1960:05:10:19,0:00:01,14,34
1074,74 bottles of beer on the wall,Option 1,0.2508690675,01NOV1961,01JAN1960:11:26:03,0:00:15,8,74
1075,75 bottles of beer on the wall,Option 1,0.814380363,17SEP1960,01JAN1960:09:00:38,0:00:25,95,1
1076,76 bottles of beer on the wall,Option 1,0.3761493621,16AUG1961,01JAN1960:01:48:17,0:00:52,5,38
1077,77 bottles of beer on the wall,Option 1,0.3621215761,25JUL1961,01JAN1960:11:48:47,0:01:20,86,90
1078,78 bottles of beer on the wall,Option 1,0.0268799584,20MAY1961,01JAN1960:12:43:34,0:01:00,70,96
1079,79 bottles of beer on the wall,Option 1,0.4112483945,27JUL1962,01JAN1960:01:20:24,0:01:26,66,20
1080,80 bottles of beer on the wall,Option 1,0.9501868011,15APR1961,01JAN1960:09:58:20,0:00:51,93,79
1081,81 bottles of beer on the wall,Option 1,0.9866548018,13SEP1961,01JAN1960:05:20:04,0:00:14,28,97
1082,82 bottles of beer on the wall,Option 1,0.9907830073,22FEB1962,01JAN1960:03:29:03,0:00:17,16,91
1083,83 bottles of beer on the wall,Option 1,0.8927816567,11MAR1960,01JAN1960:05:52:48,0:01:26,54,14
1084,84 bottles of beer on the wall,Option 1,0.12871663,02FEB1961,01JAN1960:10:34:37,0:00:44,52,90
1085,85 bottles of beer on the wall,Option 1,0.5490252802,02JAN1960,01JAN1960:06:11:58,0:00:27,4,98
1086,86 bottles of beer on the wall,Option 1,0.5432773864,11FEB1960,01JAN1960:08:40:00,0:01:15,79,19
1087,87 bottles of beer on the wall,Option 1,0.8223943137,01OCT1960,01JAN1960:08:11:33,0:01:19,2,86
1088,88 bottles of beer on the wall,Option 1,0.8496777699,09FEB1962,01JAN1960:03:10:35,0:00:15,95,6
1089,89 bottles of beer on the wall,Option 1,0.9308730536,27MAY1962,01JAN1960:11:57:53,0:01:18,86,90
1090,90 bottles of beer on the wall,Option 1,0.3072653344,23FEB1962,01JAN1960:04:52:38,0:00:25,85,17
1091,91 bottles of beer on the wall,Option 1,0.7687679575,12FEB1960,01JAN1960:08:47:11,0:01:20,8,7
1092,92 bottles of beer on the wall,Option 1,0.1873595105,29SEP1961,01JAN1960:04:29:58,0:00:29,17,78
1093,93 bottles of beer on the wall,Option 1,0.0495966631,03OCT1961,01JAN1960:03:18:50,0:00:39,89,56
1094,94 bottles of beer on the wall,Option 1,0.2607690526,19SEP1960,01JAN1960:03:22:28,0:00:29,81,16
1095,95 bottles of beer on the wall,Option 1,0.549640266,07JUN1962,01JAN1960:06:15:32,0:00:04,57,70
1096,96 bottles of beer on the wall,Option 1,0.9993291092,08MAR1961,01JAN1960:13:49:08,0:00:33,37,28
1097,97 bottles of beer on the wall,Option 1,0.9517237963,02SEP1960,01JAN1960:05:16:03,0:00:40,77,61
1098,98 bottles of beer on the wall,Option 1,0.5952155588,14FEB1962,01JAN1960:05:05:11,0:01:29,63,83
1099,99 bottles of beer on the wall,Option 1,0.7526210732,05MAY1961,01JAN1960:06:58:36,0:00:02,95,1
10100,100 bottles of beer on the wall,Option 1,0.307558153,17MAY1961,01JAN1960:06:13:01,0:01:37,68,7
10101,101 bottles of beer on the wall,Option 1,0.6596710829,15APR1962,01JAN1960:08:34:02,0:00:43,66,43
10102,102 bottles of beer on the wall,Option 1,0.0202811998,31AUG1961,01JAN1960:07:22:35,0:01:31,57,35
10103,103 bottles of beer on the wall,Option 1,0.6699061034,02MAY1962,01JAN1960:05:13:17,0:00:36,30,23
10104,104 bottles of beer on the wall,Option 1,0.330972748,04JUN1961,01JAN1960:06:47:20,0:01:05,69,82
10105,105 bottles of beer on the wall,Option 1,0.2274839176,25JAN1961,01JAN1960:05:34:51,0:00:56,63,68
10106,106 bottles of beer on the wall,Option 1,0.5612243989,27JUN1962,01JAN1960:04:32:03,0:01:15,19,73
10107,107 bottles of beer on the wall,Option 1,0.7398902111,03SEP1962,01JAN1960:08:34:07,0:00:17,90,6
10108,108 bottles of beer on the wall,Option 1,0.6124899791,08AUG1960,01JAN1960:04:59:34,0:00:25,56,12
10109,109 bottles of beer on the wall,Option 1,0.882404773,26JAN1961,01JAN1960:01:29:15,0:01:26,36,4
10110,110 bottles of beer on the wall,Option 1,0.4427004733,27FEB1961,01JAN1960:06:16:49,0:01:40,97,84
10111,111 bottles of beer on the wall,Option 1,0.3609524622,10JAN1962,01JAN1960:09:48:37,0:01:11,87,62
10112,112 bottles of beer on the wall,Option 1,0.9408929562,03AUG1960,01JAN1960:06:54:26,0:00:08,19,33
10113,113 bottles of beer on the wall,Option 1,0.3149107319,10AUG1962,01JAN1960:13:01:00,0:00:04,75,60
10114,114 bottles of beer on the wall,Option 1,0.0525069181,17APR1962,01JAN1960:13:00:52,0:00:35,9,23
10115,115 bottles of beer on the wall,Option 1,0.145448105,14FEB1962,01JAN1960:04:06:08,0:00:26,45,91
10116,116 bottles of beer on the wall,Option 1,0.2444279959,10OCT1961,01JAN1960:08:03:12,0:01:37,12,41
10117,117 bottles of beer on the wall,Option 1,0.4619846043,30JUL1960,01JAN1960:09:40:16,0:00:50,2,88
10118,118 bottles of beer on the wall,Option 1,0.0316203502,13JUL1961,01JAN1960:08:31:39,0:01:05,60,94
10119,119 bottles of beer on the wall,Option 1,0.4738720574,13AUG1960,01JAN1960:01:31:05,0:01:17,43,79
10120,120 bottles of beer on the wall,Option 1,0.8058761856,11JUN1960,01JAN1960:12:56:35,0:00:08,92,36
10121,121 bottles of beer on the wall,Option 1,0.2955600979,08JUL1962,01JAN1960:06:09:22,0:00:03,94,80