소스 검색

Added tests for ad & pattern pages

pull/160/head
bronjaermin 3 년 전
부모
커밋
5f683b5af1

+ 88
- 97
package-lock.json 파일 보기

@@ -3636,6 +3636,7 @@
"version": "8.19.0",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz",
"integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
@@ -3654,6 +3655,7 @@
"version": "7.14.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz",
"integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==",
"dev": true,
"dependencies": {
"regenerator-runtime": "^0.13.4"
}
@@ -3662,6 +3664,7 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -3676,6 +3679,7 @@
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.1.tgz",
"integrity": "sha512-4cPQjOYM2mqq7mZG8CSxkUvL2Yv/x29VhGq5LKehTsxRnoVQps1YGt9NyjcNQsznEsD4rr8a6zGxqeNTqJWjpA==",
"dev": true,
"dependencies": {
"deep-equal": "^2.0.5"
}
@@ -3684,6 +3688,7 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -3699,6 +3704,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -3709,12 +3715,14 @@
"node_modules/@testing-library/dom/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/@testing-library/dom/node_modules/deep-equal": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz",
"integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.0",
"es-get-iterator": "^1.1.1",
@@ -3740,6 +3748,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
@@ -3747,12 +3756,14 @@
"node_modules/@testing-library/dom/node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true
},
"node_modules/@testing-library/dom/node_modules/pretty-format": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
"integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
"dev": true,
"dependencies": {
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
@@ -3766,6 +3777,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
"engines": {
"node": ">=10"
},
@@ -3777,6 +3789,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -3967,7 +3980,8 @@
"node_modules/@types/aria-query": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.1.tgz",
"integrity": "sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg=="
"integrity": "sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg==",
"dev": true
},
"node_modules/@types/babel__core": {
"version": "7.1.14",
@@ -5162,6 +5176,7 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
"integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -8344,7 +8359,8 @@
"node_modules/dom-accessibility-api": {
"version": "0.5.14",
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz",
"integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg=="
"integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==",
"dev": true
},
"node_modules/dom-converter": {
"version": "0.2.0",
@@ -8754,6 +8770,7 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz",
"integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.0",
@@ -8771,7 +8788,8 @@
"node_modules/es-get-iterator/node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true
},
"node_modules/es-to-primitive": {
"version": "1.2.1",
@@ -10537,6 +10555,7 @@
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
"integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
"dev": true,
"dependencies": {
"is-callable": "^1.1.3"
}
@@ -12466,6 +12485,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
"integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -12623,6 +12643,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
"integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -12681,6 +12702,7 @@
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz",
"integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==",
"dev": true,
"dependencies": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
@@ -12704,6 +12726,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
"integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -12723,6 +12746,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
"integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.1"
@@ -14806,12 +14830,6 @@
"resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
"integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA=="
},
"node_modules/jquery": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.2.tgz",
"integrity": "sha512-/e7ulNIEEYk1Z/l4X0vpxGt+B/dNsV8ghOPAWZaJs8pkGvsSC0tm33aMGylXcj/U7y4IcvwtMXPMyBFZn/gK9A==",
"peer": true
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -15558,6 +15576,7 @@
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
"integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=",
"dev": true,
"bin": {
"lz-string": "bin/bin.js"
}
@@ -20313,6 +20332,7 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz",
"integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
},
@@ -24478,19 +24498,6 @@
"node": ">=4"
}
},
"node_modules/type-fest": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
"integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
"optional": true,
"peer": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -24516,19 +24523,6 @@
"is-typedarray": "^1.0.0"
}
},
"node_modules/typescript": {
"version": "4.9.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
"integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/typescript-compare": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz",
@@ -26575,6 +26569,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
"integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
"dev": true,
"dependencies": {
"is-map": "^2.0.1",
"is-set": "^2.0.1",
@@ -26594,6 +26589,7 @@
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz",
"integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==",
"dev": true,
"dependencies": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
@@ -28460,8 +28456,7 @@
"@emotion/use-insertion-effect-with-fallbacks": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz",
"integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==",
"requires": {}
"integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A=="
},
"@emotion/utils": {
"version": "1.2.0",
@@ -29252,8 +29247,7 @@
"@mui/types": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz",
"integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==",
"requires": {}
"integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA=="
},
"@mui/utils": {
"version": "5.10.9",
@@ -29651,6 +29645,7 @@
"version": "8.19.0",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz",
"integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
@@ -29666,6 +29661,7 @@
"version": "7.14.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz",
"integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==",
"dev": true,
"requires": {
"regenerator-runtime": "^0.13.4"
}
@@ -29674,6 +29670,7 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
@@ -29682,6 +29679,7 @@
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.1.tgz",
"integrity": "sha512-4cPQjOYM2mqq7mZG8CSxkUvL2Yv/x29VhGq5LKehTsxRnoVQps1YGt9NyjcNQsznEsD4rr8a6zGxqeNTqJWjpA==",
"dev": true,
"requires": {
"deep-equal": "^2.0.5"
}
@@ -29690,6 +29688,7 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -29699,6 +29698,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
@@ -29706,12 +29706,14 @@
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"deep-equal": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz",
"integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"es-get-iterator": "^1.1.1",
@@ -29733,17 +29735,20 @@
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true
},
"pretty-format": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
"integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
"dev": true,
"requires": {
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
@@ -29753,7 +29758,8 @@
"ansi-styles": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true
}
}
},
@@ -29761,6 +29767,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
@@ -29908,7 +29915,8 @@
"@types/aria-query": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.1.tgz",
"integrity": "sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg=="
"integrity": "sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg==",
"dev": true
},
"@types/babel__core": {
"version": "7.1.14",
@@ -30526,8 +30534,7 @@
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"requires": {}
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
},
"acorn-walk": {
"version": "7.2.0",
@@ -30579,14 +30586,12 @@
"ajv-errors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
"requires": {}
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
},
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"requires": {}
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
},
"alphanum-sort": {
"version": "1.0.2",
@@ -30886,7 +30891,8 @@
"available-typed-arrays": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
"integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw=="
"integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
"dev": true
},
"axe-core": {
"version": "4.2.2",
@@ -31084,8 +31090,7 @@
"babel-plugin-named-asset-import": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz",
"integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==",
"requires": {}
"integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw=="
},
"babel-plugin-polyfill-corejs2": {
"version": "0.2.2",
@@ -33380,7 +33385,8 @@
"dom-accessibility-api": {
"version": "0.5.14",
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz",
"integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg=="
"integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==",
"dev": true
},
"dom-converter": {
"version": "0.2.0",
@@ -33737,6 +33743,7 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz",
"integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.0",
@@ -33751,7 +33758,8 @@
"isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true
}
}
},
@@ -34033,8 +34041,7 @@
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
"integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
"dev": true,
"requires": {}
"dev": true
},
"eslint-config-react-app": {
"version": "6.0.0",
@@ -34268,8 +34275,7 @@
"eslint-plugin-react-hooks": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz",
"integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==",
"requires": {}
"integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ=="
},
"eslint-plugin-security": {
"version": "1.4.0",
@@ -35065,6 +35071,7 @@
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
"integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
"dev": true,
"requires": {
"is-callable": "^1.1.3"
}
@@ -36550,7 +36557,8 @@
"is-map": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
"integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg=="
"integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
"dev": true
},
"is-module": {
"version": "1.0.0",
@@ -36653,7 +36661,8 @@
"is-set": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
"integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g=="
"integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
"dev": true
},
"is-shared-array-buffer": {
"version": "1.0.2",
@@ -36688,6 +36697,7 @@
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz",
"integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==",
"dev": true,
"requires": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
@@ -36704,7 +36714,8 @@
"is-weakmap": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
"integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA=="
"integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
"dev": true
},
"is-weakref": {
"version": "1.0.2",
@@ -36718,6 +36729,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
"integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.1"
@@ -37507,8 +37519,7 @@
"jest-pnp-resolver": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
"requires": {}
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w=="
},
"jest-regex-util": {
"version": "26.0.0",
@@ -38254,12 +38265,6 @@
"resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
"integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA=="
},
"jquery": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.2.tgz",
"integrity": "sha512-/e7ulNIEEYk1Z/l4X0vpxGt+B/dNsV8ghOPAWZaJs8pkGvsSC0tm33aMGylXcj/U7y4IcvwtMXPMyBFZn/gK9A==",
"peer": true
},
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -38859,7 +38864,8 @@
"lz-string": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
"integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY="
"integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=",
"dev": true
},
"magic-string": {
"version": "0.25.7",
@@ -42481,7 +42487,8 @@
"prettier": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz",
"integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA=="
"integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==",
"dev": true
},
"prettier-linter-helpers": {
"version": "1.0.0",
@@ -43439,8 +43446,7 @@
"redux-thunk": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz",
"integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==",
"requires": {}
"integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q=="
},
"regenerate": {
"version": "1.4.2",
@@ -43782,8 +43788,7 @@
"rifm": {
"version": "0.12.1",
"resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz",
"integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==",
"requires": {}
"integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg=="
},
"rimraf": {
"version": "3.0.2",
@@ -44517,8 +44522,7 @@
"slick-carousel": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz",
"integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==",
"requires": {}
"integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA=="
},
"snapdragon": {
"version": "0.8.2",
@@ -45787,13 +45791,6 @@
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
},
"type-fest": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
"integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
"optional": true,
"peer": true
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -45816,12 +45813,6 @@
"is-typedarray": "^1.0.0"
}
},
"typescript": {
"version": "4.9.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
"integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
"peer": true
},
"typescript-compare": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz",
@@ -46148,8 +46139,7 @@
"use-dynamic-refs": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/use-dynamic-refs/-/use-dynamic-refs-1.0.0.tgz",
"integrity": "sha512-1Ky+Jaj6MIpTRz6NTaCLVm/iDXfRNwUMH9X7BkLtgSL2RCXHQhK2p9SVhut8jZPDfxLDtOIYNM3txsiLXd4yVQ==",
"requires": {}
"integrity": "sha512-1Ky+Jaj6MIpTRz6NTaCLVm/iDXfRNwUMH9X7BkLtgSL2RCXHQhK2p9SVhut8jZPDfxLDtOIYNM3txsiLXd4yVQ=="
},
"util": {
"version": "0.11.1",
@@ -47453,6 +47443,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
"integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
"dev": true,
"requires": {
"is-map": "^2.0.1",
"is-set": "^2.0.1",
@@ -47469,6 +47460,7 @@
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz",
"integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==",
"dev": true,
"requires": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
@@ -47756,8 +47748,7 @@
"ws": {
"version": "7.4.6",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
"requires": {}
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
},
"xdg-basedir": {
"version": "4.0.0",

+ 92
- 0
src/__tests__/UITests/adDetailsPageUI.test.js 파일 보기

@@ -0,0 +1,92 @@
import { render, screen, fireEvent, waitFor } from "@testing-library/react";
import * as redux from "react-redux";
import AdDetailsPage from "../../pages/AdsPage/AdDetailsPage";
import store from "../../store";
import { mockState } from "../../mockState";
import { Router } from "react-router-dom";
import history from "../../store/utils/history";
import ColorModeProvider from "../../context/ColorModeContext";

describe("AdDetailsPage render tests", () => {
var props = {
history: {
replace: jest.fn(),

push: jest.fn(),

location: {
pathname: "/ads/1",
},
},
};

const cont = (
<redux.Provider store={store}>
<Router history={history}>
<ColorModeProvider>
<AdDetailsPage {...props} />
</ColorModeProvider>
</Router>
</redux.Provider>
);

let spyOnUseSelector;

beforeEach(() => {
spyOnUseSelector = jest.spyOn(redux, "useSelector");
spyOnUseSelector.mockReturnValue(mockState.ads.ads[0]);
});

afterEach(() => {
jest.resetAllMocks();
});

it("Should render AdDetailsPage", () => {
render(cont);
expect(screen.getByTestId("ad-details-page")).toBeDefined();
});

it("Should render modal when click archive ad button", () => {
const { container } = render(cont);

fireEvent.click(container.getElementsByClassName("archive-ad-button")[0]);

expect(screen.getByTestId("alert-container")).toBeDefined();
});

it("Should render apply for ad button", () => {
const { container } = render(cont);
expect(
container.getElementsByClassName("apply-for-ad-button")[0]
).toBeDefined();
});

it("Should render apply for ad modal after click button", () => {
const { container } = render(cont);

fireEvent.click(container.getElementsByClassName("apply-for-ad-button")[0]);

const a = screen.getByTestId("custom-modal-test-id");

expect(screen.getByTestId("custom-modal-test-id")).toBeDefined();
});

it("Should render go back button", () => {
const { container } = render(cont);
expect(
container.getElementsByClassName("ad-details-buttons-link")[0]
).toBeDefined();
});

it("Should go back when click button", async () => {
const { container } = render(cont);

fireEvent.click(
container.getElementsByClassName("ad-details-buttons-link")[0]
);

const arg = { pathname: "/ads" };

waitFor(() => expect(props.history.push).toHaveBeenCalledWith(arg));
});
});

+ 31
- 12
src/__tests__/UITests/adsPageUI.test.js 파일 보기

@@ -8,11 +8,23 @@ import history from "../../store/utils/history";
import ColorModeProvider from "../../context/ColorModeContext";

describe("AdsPage render tests", () => {
var props = {
history: {
replace: jest.fn(),

push: jest.fn(),

location: {
pathname: "/ads",
},
},
};

const cont = (
<redux.Provider store={store}>
<Router history={history}>
<ColorModeProvider>
<AdsPage />
<AdsPage {...props} />
</ColorModeProvider>
</Router>
</redux.Provider>
@@ -49,6 +61,13 @@ describe("AdsPage render tests", () => {
expect(container.getElementsByClassName("ads-page-btn")[2]).toBeDefined();
});

it("Should render CreateAdPage when click Add Ad button", () => {
const { container } = render(cont);
fireEvent.click(container.getElementsByClassName("ads-page-btn")[2]);

expect(props.history.push).toHaveBeenCalledWith('/create-ad');
});

it("Input for searching by title should not be shown when component is initialy rendered", () => {
const { container } = render(cont);
expect(
@@ -59,33 +78,33 @@ describe("AdsPage render tests", () => {

it("Should be rendered ad cards", () => {
const { container } = render(cont);
expect(container.getElementsByClassName('ad-card').length).toBeGreaterThan(0);
expect(container.getElementsByClassName("ad-card").length).toBeGreaterThan(
0
);
});

it("Should be rendered archive ad cards", () => {
const { container } = render(cont);
expect(container.getElementsByClassName('archive-ad').length).toBe(0);
expect(container.getElementsByClassName("archive-ad").length).toBe(0);
});

it("Should render filter drawer after click filter button", () => {
const { container } = render(cont);
fireEvent.click(container.getElementsByClassName("fltr-btn")[0]);
expect(screen.getByTestId('ad-filters-drawer')).toBeDefined();
});

it("Should render modal after add ad button clicked", () => {
const { container } = render(cont);
fireEvent.click(container.getElementsByClassName("ads-page-btn")[2]);
expect(screen.getByTestId('add-ad-modal')).toBeDefined();
expect(screen.getByTestId("ad-filters-drawer")).toBeDefined();
});

it("Should render arrow buttons for active ads slider", () => {
const { container } = render(cont);
expect(container.getElementsByClassName('active-ads-ads-arrows')).toBeDefined();
expect(
container.getElementsByClassName("active-ads-ads-arrows")
).toBeDefined();
});

it("Should render arrow buttons for archived ads slider", () => {
const { container } = render(cont);
expect(container.getElementsByClassName('archived-ads-ads-arrows')).toBeDefined();
expect(
container.getElementsByClassName("archived-ads-ads-arrows")
).toBeDefined();
});
});

+ 86
- 0
src/__tests__/UITests/createAdPageUI.test.js 파일 보기

@@ -0,0 +1,86 @@
import { render, screen, fireEvent } from "@testing-library/react";
import * as redux from "react-redux";
import CreateAdPage from "../../pages/AdsPage/CreateAdPage";
import store from "../../store";
import { mockState } from "../../mockState";
import { Router } from "react-router-dom";
import history from "../../store/utils/history";
import ColorModeProvider from "../../context/ColorModeContext";
import CreateAdSecondStep from "../../pages/AdsPage/CreateAdSecondStep";

describe("CreateAdPage render tests", () => {
const cont = (
<redux.Provider store={store}>
<Router history={history}>
<ColorModeProvider>
<CreateAdPage />
</ColorModeProvider>
</Router>
</redux.Provider>
);

let spyOnUseSelector;

beforeEach(() => {
spyOnUseSelector = jest.spyOn(redux, "useSelector");
spyOnUseSelector.mockReturnValue([
{
technologyId: 1,
name: ".NET",
technologyType: "Backend",
isChecked: true,
},
]);
});

afterEach(() => {
jest.resetAllMocks();
});

it("Should render create ad page", () => {
render(cont);
expect(screen.getByTestId("create-ad-page")).toBeDefined();
});

it("Should render go back button", () => {
const { container } = render(cont);
expect(
container.getElementsByClassName("create-ad-buttons-back")[0]
).toBeDefined();
});

it("Should render go forward button", () => {
const { container } = render(cont);
expect(
container.getElementsByClassName("create-ad-buttons-forward")[0]
).toBeDefined();
});

it("Should render create ad first step form", () => {
render(cont);
expect(screen.getByTestId("create-ad-first-step-form")).toBeDefined();
});

it("Should render sercond step form", () => {
const { container } = render(cont);
const formControls = container.getElementsByClassName(
"create-ad-form-control-first-step-input"
);

fireEvent.change(formControls[0], { target: { value: ".NET DEVELOPER" } });

fireEvent.change(formControls[1], { target: { value: "2020-05-24" } });

fireEvent.click(
container.getElementsByClassName("create-ad-buttons-forward")[0]
);

fireEvent.click(container.getElementsByClassName("create-ad-second-step-checkbox")[0])

fireEvent.click(
container.getElementsByClassName("create-ad-buttons-forward")[0]
);

expect(screen.getByTestId("create-ad-third-step-form")).toBeDefined();
});
});

+ 25
- 3
src/__tests__/UITests/patternsPageUI.test.js 파일 보기

@@ -5,7 +5,6 @@ import store from "../../store";
import { mockState } from "../../mockState";
import { Router } from "react-router-dom";
import history from "../../store/utils/history";
import PatternCard from "../../components/Patterns/PatternCard";

describe("PatternsPage render tests", () => {
const cont = (
@@ -20,7 +19,15 @@ describe("PatternsPage render tests", () => {

beforeEach(() => {
spyOnUseSelector = jest.spyOn(redux, "useSelector");
spyOnUseSelector.mockReturnValueOnce(mockState.patterns.patterns);
spyOnUseSelector
.mockReturnValueOnce(mockState.patterns.patterns)
// .mockReturnValueOnce([
// {
// id: 1,
// name: "HR intervju",
// selectionProcesses: [],
// },
// ]);
});

afterEach(() => {
@@ -45,7 +52,7 @@ describe("PatternsPage render tests", () => {
expect(btn1).toBeDefined();
});

it("Should render pattern cards", () => {
it("Should render pattern cards", async () => {
const { container } = render(cont);
expect(
container.getElementsByClassName("pattern-card-parent").length
@@ -74,4 +81,19 @@ describe("PatternsPage render tests", () => {
var modal = screen.getByTestId("custom-modal-test-id");
expect(modal).toBeDefined();
});

it("Should render filter button", () => {
const { container } = render(cont);
expect(
container.getElementsByClassName("custom-filter-button")
).toBeDefined();
});

it("Should render filters", () => {
const { container } = render(cont);
fireEvent.click(
container.getElementsByClassName("custom-filter-button")[0]
);
expect(screen.getByTestId("pattern-filters")).toBeDefined();
});
});

+ 4
- 0
src/assets/styles/components/_ads.scss 파일 보기

@@ -695,6 +695,10 @@ h3 {

.ad-details-buttons-link {
color: $mainBlue;
cursor: pointer;
border: none;
background-color: transparent;
text-decoration: underline;
}

.ad-details-candidate-technologies {

+ 1
- 1
src/components/Ads/ApplyForAd.js 파일 보기

@@ -39,7 +39,7 @@ const ApplyForAd = ({ open, title, adId, onCloseModal }) => {
}, []);

useEffect(() => {
if (technologies.length > 0) {
if (technologies && technologies.length > 0) {
const tech = technologies.map((t) => ({ ...t, isChecked: false }));
setMappedTechnologies(tech);
}

+ 1
- 1
src/components/Button/FilterButton.js 파일 보기

@@ -11,7 +11,7 @@ const FilterButton = ({ onShowFilters }) => {

return (
<IconButton
className={"c-btn--primary-outlined ads-page-btn fltr-btn c-btn userPageBtn ml-20px no-padding"}
className={"c-btn--primary-outlined ads-page-btn fltr-btn c-btn userPageBtn ml-20px no-padding custom-filter-button"}
onClick={onShowFilters}
>
{!matches && "Filteri"}

+ 1
- 0
src/components/Patterns/PatternFilters.js 파일 보기

@@ -79,6 +79,7 @@ const PatternFilters = ({
value={process.name}
checked={process.isChecked}
onChange={() => onChangeFilterCheckboxes(process.id)}
className="pattern-filters-checkbox"
/>
}
label={process.name}

+ 1
- 1
src/components/UI/CustomDrawer.js 파일 보기

@@ -17,7 +17,7 @@ const CustomDrawer = ({ title, open, onCloseDrawer, children }) => {
role="presentation"
onKeyDown={onCloseDrawer}
>
<div>
<div data-testid="pattern-filters">
<div className="custom-filter-drawer-header-container">
<div className="custom-filter-drawer-header">
<img src={filterIcon} alt="filter_icon" />

+ 12
- 8
src/pages/AdsPage/AdDetailsPage.js 파일 보기

@@ -1,7 +1,7 @@
import React, { useEffect, useRef } from "react";
import { IconButton, useMediaQuery } from "@mui/material";
import { useMediaQuery } from "@mui/material";
// import aspNetIcon from "../../assets/images/.net_icon.png";
import { Link } from "react-router-dom";
// import { Link } from "react-router-dom";
import { useParams } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux";
import { setAdReq } from "../../store/actions/ad/adActions";
@@ -23,6 +23,7 @@ import ApplyForAd from "../../components/Ads/ApplyForAd";
import { useState } from "react";
import parse from "html-react-parser";
import ConfirmDialog from "../../components/MUI/ConfirmDialog";
import IconButton from "../../components/IconButton/IconButton";

const AdDetailsPage = () => {
const theme = useTheme();
@@ -107,7 +108,7 @@ const AdDetailsPage = () => {
<>
{!ad && <p>Radi</p>}
{ad && (
<>
<div data-testid="ad-details-page">
<ApplyForAd
open={applyForAdOpenModal}
title={ad.title}
@@ -138,7 +139,7 @@ const AdDetailsPage = () => {
{!(new Date(ad.expiredAt) < new Date()) && (
<IconButton
onClick={() => setShowArchiveAdDialog(true)}
className={`c-btn--primary-outlined editEnableBtn c-btn userPageBtn
className={`c-btn--primary-outlined editEnableBtn c-btn userPageBtn archive-ad-button
}`}
>
{!matches && "Arhiviraj"}
@@ -261,13 +262,16 @@ const AdDetailsPage = () => {
</div>
)}
<div className="ad-details-buttons">
<Link className="ad-details-buttons-link" to="/ads">
<button
className="ad-details-buttons-link"
onClick={() => history.push({ pathname: ADS_PAGE })}
>
Nazad na sve oglase
</Link>
</button>

{!(new Date(ad.expiredAt) < new Date()) && (
<IconButton
className="c-btn c-btn--primary add-ad-btn"
className="c-btn c-btn--primary add-ad-btn apply-for-ad-button"
onClick={() => setApplyForAdOpenModal(true)}
>
PRIJAVI SE
@@ -276,7 +280,7 @@ const AdDetailsPage = () => {
</div>
</div>
</div>
</>
</div>
)}
</>
);

+ 3
- 1
src/pages/AdsPage/CreateAdFirstStep.js 파일 보기

@@ -20,11 +20,12 @@ const CreateAdFirstStep = ({
};

return (
<div>
<div data-testid="create-ad-first-step-form">
<div className="create-ad-form-control">
<label>Naslov</label>
<input
type="text"
className="create-ad-form-control-first-step-input"
onChange={(e) => setTitle(e.target.value)}
value={title}
placeholder="ex. Medior React Developer"
@@ -84,6 +85,7 @@ const CreateAdFirstStep = ({
<label>Datum isteka oglasa</label>
<input
type="date"
className="create-ad-form-control-first-step-input"
onChange={(e) => setExpiredAt(e.target.value)}
value={expiredAt}
/>

+ 1
- 1
src/pages/AdsPage/CreateAdPage.js 파일 보기

@@ -107,7 +107,7 @@ const CreateAdPage = () => {
};

return (
<div className="create-ad-page">
<div className="create-ad-page" data-testid="create-ad-page">
<div className="create-ad-page-content">
<div className="create-ad-page-content-header">
<img

+ 4
- 1
src/pages/AdsPage/CreateAdSecondStep.js 파일 보기

@@ -12,7 +12,7 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => {
};

return (
<div>
<div data-testid="create-ad-second-step-form">
<div className="create-ad-form-control">
<label>Napredne tehnologije</label>
</div>
@@ -30,6 +30,7 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => {
value={x.name}
checked={x.isChecked}
onChange={handleCheckboxes.bind(this, x.technologyId)}
className="create-ad-second-step-checkbox"
/>
}
label={x.name}
@@ -51,6 +52,7 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => {
value={x.name}
checked={x.isChecked}
onChange={handleCheckboxes.bind(this, x.technologyId)}
className="create-ad-second-step-checkbox"
/>
}
label={x.name}
@@ -72,6 +74,7 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => {
value={x.name}
checked={x.isChecked}
onChange={handleCheckboxes.bind(this, x.technologyId)}
className="create-ad-second-step-checkbox"
/>
}
label={x.name}

+ 1
- 1
src/pages/AdsPage/CreateAdThirdStep.js 파일 보기

@@ -22,7 +22,7 @@ const CreateAdThirdStep = ({ childRef }) => {
}

return (
<div>
<div data-testid="create-ad-third-step-form">
<div className="create-ad-form-control">
<label>Glavna zaduženja</label>
<Editor

+ 7
- 6
src/pages/PatternsPage/PatternDetailsPage.js 파일 보기

@@ -40,21 +40,22 @@ const PatternDetailsPage = () => {
}, [patternApplicants]);

useEffect(() => {
dispatch(setPatternApplicantsReq({ id }));
dispatch(setPatternReq({ id }));
}, []);

useEffect(() => {
dispatch(setPatternReq({ id }));
dispatch(setPatternApplicantsReq({ id }));
}, []);

useEffect(() => {
if (patternApplicants.length > 0) {
if (patternApplicants && patternApplicants.length > 0) {
setEmail(patternApplicants[0].email);
}
}, [patternApplicants]);

useEffect(() => {
const arrOfApplicants = [];
if(!patternApplicants || !emails) return
for (let i = 0; i < patternApplicants.length; i++) {
let s = 0;
for (let j = 0; j < emails.length; j++) {
@@ -99,7 +100,7 @@ const PatternDetailsPage = () => {
</div>
)}
{pattern && (
<div className="pattern-details">
<div className="pattern-details" data-testid="pattern-details">
<div className="pattern-details-header">
<p>
<span>Napravljen:</span>{" "}
@@ -138,7 +139,7 @@ const PatternDetailsPage = () => {
</div>
<div className="pattern-details-card-sub-card-add-email">
<select onChange={(e) => setEmail(e.target.value)}>
{selectedPatternApplicants.length > 0 &&
{selectedPatternApplicants && selectedPatternApplicants.length > 0 &&
selectedPatternApplicants.map((applicant) => (
<option
key={applicant.applicantId}
@@ -171,7 +172,7 @@ const PatternDetailsPage = () => {
Nazad na sve šablone
</Link>
<IconButton
disabled={emails.length === 0}
disabled={emails && emails.length === 0}
className="c-btn c-btn--primary add-ad-btn"
onClick={scheduleAppointmentHandler}
>

Loading…
취소
저장