mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -05:00 
			
		
		
		
	Add AlbumCard UI tests
- add libraries for component UI testing - implement AlbumCard UI tests
This commit is contained in:
		
							parent
							
								
									92c4f0598b
								
							
						
					
					
						commit
						f476bd985b
					
				@ -178,14 +178,17 @@ export default {
 | 
			
		||||
 | 
			
		||||
	// A map from regular expressions to paths to transformers
 | 
			
		||||
	transform: {
 | 
			
		||||
		'\\.[jt]sx?$': 'babel-jest'
 | 
			
		||||
		'\\.[jt]sx?$': 'babel-jest',
 | 
			
		||||
		'^.+\\.svelte$': [
 | 
			
		||||
			'svelte-jester',
 | 
			
		||||
			{
 | 
			
		||||
				preprocess: true
 | 
			
		||||
			}
 | 
			
		||||
		]
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
 | 
			
		||||
	// transformIgnorePatterns: [
 | 
			
		||||
	//   "/node_modules/",
 | 
			
		||||
	//   "\\.pnp\\.[^\\/]+$"
 | 
			
		||||
	// ],
 | 
			
		||||
	transformIgnorePatterns: ['/node_modules/(?!svelte-material-icons).*/', '\\.pnp\\.[^\\/]+$']
 | 
			
		||||
 | 
			
		||||
	// An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
 | 
			
		||||
	// unmockedModulePathPatterns: undefined,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										338
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										338
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							@ -25,6 +25,8 @@
 | 
			
		||||
				"@sveltejs/adapter-auto": "next",
 | 
			
		||||
				"@sveltejs/adapter-node": "next",
 | 
			
		||||
				"@sveltejs/kit": "next",
 | 
			
		||||
				"@testing-library/jest-dom": "^5.16.5",
 | 
			
		||||
				"@testing-library/svelte": "^3.2.1",
 | 
			
		||||
				"@types/bcrypt": "^5.0.0",
 | 
			
		||||
				"@types/cookie": "^0.4.1",
 | 
			
		||||
				"@types/fluent-ffmpeg": "^2.1.20",
 | 
			
		||||
@ -48,13 +50,19 @@
 | 
			
		||||
				"svelte": "^3.44.0",
 | 
			
		||||
				"svelte-check": "^2.7.1",
 | 
			
		||||
				"svelte-jester": "^2.3.2",
 | 
			
		||||
				"svelte-preprocess": "^4.10.6",
 | 
			
		||||
				"svelte-preprocess": "^4.10.7",
 | 
			
		||||
				"tailwindcss": "^3.0.24",
 | 
			
		||||
				"tslib": "^2.3.1",
 | 
			
		||||
				"typescript": "^4.7.4",
 | 
			
		||||
				"vite": "^3.0.0"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@adobe/css-tools": {
 | 
			
		||||
			"version": "4.0.1",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz",
 | 
			
		||||
			"integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@ampproject/remapping": {
 | 
			
		||||
			"version": "2.2.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
 | 
			
		||||
@ -2626,6 +2634,107 @@
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@testing-library/dom": {
 | 
			
		||||
			"version": "8.17.1",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.17.1.tgz",
 | 
			
		||||
			"integrity": "sha512-KnH2MnJUzmFNPW6RIKfd+zf2Wue8mEKX0M3cpX6aKl5ZXrJM1/c/Pc8c2xDNYQCnJO48Sm5ITbMXgqTr3h4jxQ==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"dependencies": {
 | 
			
		||||
				"@babel/code-frame": "^7.10.4",
 | 
			
		||||
				"@babel/runtime": "^7.12.5",
 | 
			
		||||
				"@types/aria-query": "^4.2.0",
 | 
			
		||||
				"aria-query": "^5.0.0",
 | 
			
		||||
				"chalk": "^4.1.0",
 | 
			
		||||
				"dom-accessibility-api": "^0.5.9",
 | 
			
		||||
				"lz-string": "^1.4.4",
 | 
			
		||||
				"pretty-format": "^27.0.2"
 | 
			
		||||
			},
 | 
			
		||||
			"engines": {
 | 
			
		||||
				"node": ">=12"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@testing-library/dom/node_modules/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==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"engines": {
 | 
			
		||||
				"node": ">=10"
 | 
			
		||||
			},
 | 
			
		||||
			"funding": {
 | 
			
		||||
				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"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",
 | 
			
		||||
				"react-is": "^17.0.1"
 | 
			
		||||
			},
 | 
			
		||||
			"engines": {
 | 
			
		||||
				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@testing-library/dom/node_modules/react-is": {
 | 
			
		||||
			"version": "17.0.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
 | 
			
		||||
			"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@testing-library/jest-dom": {
 | 
			
		||||
			"version": "5.16.5",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz",
 | 
			
		||||
			"integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"dependencies": {
 | 
			
		||||
				"@adobe/css-tools": "^4.0.1",
 | 
			
		||||
				"@babel/runtime": "^7.9.2",
 | 
			
		||||
				"@types/testing-library__jest-dom": "^5.9.1",
 | 
			
		||||
				"aria-query": "^5.0.0",
 | 
			
		||||
				"chalk": "^3.0.0",
 | 
			
		||||
				"css.escape": "^1.5.1",
 | 
			
		||||
				"dom-accessibility-api": "^0.5.6",
 | 
			
		||||
				"lodash": "^4.17.15",
 | 
			
		||||
				"redent": "^3.0.0"
 | 
			
		||||
			},
 | 
			
		||||
			"engines": {
 | 
			
		||||
				"node": ">=8",
 | 
			
		||||
				"npm": ">=6",
 | 
			
		||||
				"yarn": ">=1"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@testing-library/jest-dom/node_modules/chalk": {
 | 
			
		||||
			"version": "3.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
 | 
			
		||||
			"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"dependencies": {
 | 
			
		||||
				"ansi-styles": "^4.1.0",
 | 
			
		||||
				"supports-color": "^7.1.0"
 | 
			
		||||
			},
 | 
			
		||||
			"engines": {
 | 
			
		||||
				"node": ">=8"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@testing-library/svelte": {
 | 
			
		||||
			"version": "3.2.1",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@testing-library/svelte/-/svelte-3.2.1.tgz",
 | 
			
		||||
			"integrity": "sha512-qP5nMAx78zt+a3y9Sws9BNQYP30cOQ/LXDYuAj7wNtw86b7AtB7TFAz6/Av9hFsW3IJHPBBIGff6utVNyq+F1g==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"dependencies": {
 | 
			
		||||
				"@testing-library/dom": "^8.1.0"
 | 
			
		||||
			},
 | 
			
		||||
			"engines": {
 | 
			
		||||
				"node": ">= 10"
 | 
			
		||||
			},
 | 
			
		||||
			"peerDependencies": {
 | 
			
		||||
				"svelte": "3.x"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@tootallnate/once": {
 | 
			
		||||
			"version": "2.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
 | 
			
		||||
@ -2635,6 +2744,12 @@
 | 
			
		||||
				"node": ">= 10"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@types/aria-query": {
 | 
			
		||||
			"version": "4.2.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz",
 | 
			
		||||
			"integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@types/babel__core": {
 | 
			
		||||
			"version": "7.1.19",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz",
 | 
			
		||||
@ -2739,6 +2854,16 @@
 | 
			
		||||
				"@types/istanbul-lib-report": "*"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@types/jest": {
 | 
			
		||||
			"version": "29.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.0.0.tgz",
 | 
			
		||||
			"integrity": "sha512-X6Zjz3WO4cT39Gkl0lZ2baFRaEMqJl5NC1OjElkwtNzAlbkr2K/WJXkBkH5VP0zx4Hgsd2TZYdOEfvp2Dxia+Q==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"dependencies": {
 | 
			
		||||
				"expect": "^29.0.0",
 | 
			
		||||
				"pretty-format": "^29.0.0"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@types/jsdom": {
 | 
			
		||||
			"version": "20.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.0.tgz",
 | 
			
		||||
@ -2823,6 +2948,15 @@
 | 
			
		||||
			"integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@types/testing-library__jest-dom": {
 | 
			
		||||
			"version": "5.14.5",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz",
 | 
			
		||||
			"integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"dependencies": {
 | 
			
		||||
				"@types/jest": "*"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/@types/tough-cookie": {
 | 
			
		||||
			"version": "4.0.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
 | 
			
		||||
@ -3260,6 +3394,15 @@
 | 
			
		||||
			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/aria-query": {
 | 
			
		||||
			"version": "5.0.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.2.tgz",
 | 
			
		||||
			"integrity": "sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"engines": {
 | 
			
		||||
				"node": ">=6.0"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/array-union": {
 | 
			
		||||
			"version": "2.1.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
 | 
			
		||||
@ -3866,6 +4009,12 @@
 | 
			
		||||
				"node": ">= 8"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/css.escape": {
 | 
			
		||||
			"version": "1.5.1",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
 | 
			
		||||
			"integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/cssesc": {
 | 
			
		||||
			"version": "3.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
 | 
			
		||||
@ -4133,6 +4282,12 @@
 | 
			
		||||
				"node": ">=6.0.0"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"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==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/domexception": {
 | 
			
		||||
			"version": "4.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
 | 
			
		||||
@ -5601,6 +5756,15 @@
 | 
			
		||||
				"node": ">=0.8.19"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/indent-string": {
 | 
			
		||||
			"version": "4.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
 | 
			
		||||
			"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"engines": {
 | 
			
		||||
				"node": ">=8"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/inflight": {
 | 
			
		||||
			"version": "1.0.6",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
 | 
			
		||||
@ -6660,6 +6824,15 @@
 | 
			
		||||
				"node": ">=10"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/lz-string": {
 | 
			
		||||
			"version": "1.4.4",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
 | 
			
		||||
			"integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"bin": {
 | 
			
		||||
				"lz-string": "bin/bin.js"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/magic-string": {
 | 
			
		||||
			"version": "0.26.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz",
 | 
			
		||||
@ -7621,6 +7794,19 @@
 | 
			
		||||
				"node": ">=8.10.0"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/redent": {
 | 
			
		||||
			"version": "3.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
 | 
			
		||||
			"integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"dependencies": {
 | 
			
		||||
				"indent-string": "^4.0.0",
 | 
			
		||||
				"strip-indent": "^3.0.0"
 | 
			
		||||
			},
 | 
			
		||||
			"engines": {
 | 
			
		||||
				"node": ">=8"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"node_modules/regenerate": {
 | 
			
		||||
			"version": "1.4.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
 | 
			
		||||
@ -9091,6 +9277,12 @@
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	"dependencies": {
 | 
			
		||||
		"@adobe/css-tools": {
 | 
			
		||||
			"version": "4.0.1",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz",
 | 
			
		||||
			"integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"@ampproject/remapping": {
 | 
			
		||||
			"version": "2.2.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
 | 
			
		||||
@ -10964,12 +11156,97 @@
 | 
			
		||||
				"svelte-hmr": "^0.14.12"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"@testing-library/dom": {
 | 
			
		||||
			"version": "8.17.1",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.17.1.tgz",
 | 
			
		||||
			"integrity": "sha512-KnH2MnJUzmFNPW6RIKfd+zf2Wue8mEKX0M3cpX6aKl5ZXrJM1/c/Pc8c2xDNYQCnJO48Sm5ITbMXgqTr3h4jxQ==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"requires": {
 | 
			
		||||
				"@babel/code-frame": "^7.10.4",
 | 
			
		||||
				"@babel/runtime": "^7.12.5",
 | 
			
		||||
				"@types/aria-query": "^4.2.0",
 | 
			
		||||
				"aria-query": "^5.0.0",
 | 
			
		||||
				"chalk": "^4.1.0",
 | 
			
		||||
				"dom-accessibility-api": "^0.5.9",
 | 
			
		||||
				"lz-string": "^1.4.4",
 | 
			
		||||
				"pretty-format": "^27.0.2"
 | 
			
		||||
			},
 | 
			
		||||
			"dependencies": {
 | 
			
		||||
				"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==",
 | 
			
		||||
					"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",
 | 
			
		||||
						"react-is": "^17.0.1"
 | 
			
		||||
					}
 | 
			
		||||
				},
 | 
			
		||||
				"react-is": {
 | 
			
		||||
					"version": "17.0.2",
 | 
			
		||||
					"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
 | 
			
		||||
					"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
 | 
			
		||||
					"dev": true
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"@testing-library/jest-dom": {
 | 
			
		||||
			"version": "5.16.5",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz",
 | 
			
		||||
			"integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"requires": {
 | 
			
		||||
				"@adobe/css-tools": "^4.0.1",
 | 
			
		||||
				"@babel/runtime": "^7.9.2",
 | 
			
		||||
				"@types/testing-library__jest-dom": "^5.9.1",
 | 
			
		||||
				"aria-query": "^5.0.0",
 | 
			
		||||
				"chalk": "^3.0.0",
 | 
			
		||||
				"css.escape": "^1.5.1",
 | 
			
		||||
				"dom-accessibility-api": "^0.5.6",
 | 
			
		||||
				"lodash": "^4.17.15",
 | 
			
		||||
				"redent": "^3.0.0"
 | 
			
		||||
			},
 | 
			
		||||
			"dependencies": {
 | 
			
		||||
				"chalk": {
 | 
			
		||||
					"version": "3.0.0",
 | 
			
		||||
					"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
 | 
			
		||||
					"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
 | 
			
		||||
					"dev": true,
 | 
			
		||||
					"requires": {
 | 
			
		||||
						"ansi-styles": "^4.1.0",
 | 
			
		||||
						"supports-color": "^7.1.0"
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"@testing-library/svelte": {
 | 
			
		||||
			"version": "3.2.1",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@testing-library/svelte/-/svelte-3.2.1.tgz",
 | 
			
		||||
			"integrity": "sha512-qP5nMAx78zt+a3y9Sws9BNQYP30cOQ/LXDYuAj7wNtw86b7AtB7TFAz6/Av9hFsW3IJHPBBIGff6utVNyq+F1g==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"requires": {
 | 
			
		||||
				"@testing-library/dom": "^8.1.0"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"@tootallnate/once": {
 | 
			
		||||
			"version": "2.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
 | 
			
		||||
			"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"@types/aria-query": {
 | 
			
		||||
			"version": "4.2.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz",
 | 
			
		||||
			"integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"@types/babel__core": {
 | 
			
		||||
			"version": "7.1.19",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz",
 | 
			
		||||
@ -11074,6 +11351,16 @@
 | 
			
		||||
				"@types/istanbul-lib-report": "*"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"@types/jest": {
 | 
			
		||||
			"version": "29.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.0.0.tgz",
 | 
			
		||||
			"integrity": "sha512-X6Zjz3WO4cT39Gkl0lZ2baFRaEMqJl5NC1OjElkwtNzAlbkr2K/WJXkBkH5VP0zx4Hgsd2TZYdOEfvp2Dxia+Q==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"requires": {
 | 
			
		||||
				"expect": "^29.0.0",
 | 
			
		||||
				"pretty-format": "^29.0.0"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"@types/jsdom": {
 | 
			
		||||
			"version": "20.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.0.tgz",
 | 
			
		||||
@ -11157,6 +11444,15 @@
 | 
			
		||||
			"integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"@types/testing-library__jest-dom": {
 | 
			
		||||
			"version": "5.14.5",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz",
 | 
			
		||||
			"integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"requires": {
 | 
			
		||||
				"@types/jest": "*"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"@types/tough-cookie": {
 | 
			
		||||
			"version": "4.0.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
 | 
			
		||||
@ -11451,6 +11747,12 @@
 | 
			
		||||
			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"aria-query": {
 | 
			
		||||
			"version": "5.0.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.2.tgz",
 | 
			
		||||
			"integrity": "sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"array-union": {
 | 
			
		||||
			"version": "2.1.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
 | 
			
		||||
@ -11908,6 +12210,12 @@
 | 
			
		||||
				"which": "^2.0.1"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"css.escape": {
 | 
			
		||||
			"version": "1.5.1",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
 | 
			
		||||
			"integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"cssesc": {
 | 
			
		||||
			"version": "3.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
 | 
			
		||||
@ -12111,6 +12419,12 @@
 | 
			
		||||
				"esutils": "^2.0.2"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"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==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"domexception": {
 | 
			
		||||
			"version": "4.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
 | 
			
		||||
@ -13102,6 +13416,12 @@
 | 
			
		||||
			"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"indent-string": {
 | 
			
		||||
			"version": "4.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
 | 
			
		||||
			"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"inflight": {
 | 
			
		||||
			"version": "1.0.6",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
 | 
			
		||||
@ -13909,6 +14229,12 @@
 | 
			
		||||
				"yallist": "^4.0.0"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"lz-string": {
 | 
			
		||||
			"version": "1.4.4",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
 | 
			
		||||
			"integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==",
 | 
			
		||||
			"dev": true
 | 
			
		||||
		},
 | 
			
		||||
		"magic-string": {
 | 
			
		||||
			"version": "0.26.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz",
 | 
			
		||||
@ -14562,6 +14888,16 @@
 | 
			
		||||
				"picomatch": "^2.2.1"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"redent": {
 | 
			
		||||
			"version": "3.0.0",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
 | 
			
		||||
			"integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
 | 
			
		||||
			"dev": true,
 | 
			
		||||
			"requires": {
 | 
			
		||||
				"indent-string": "^4.0.0",
 | 
			
		||||
				"strip-indent": "^3.0.0"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"regenerate": {
 | 
			
		||||
			"version": "1.4.2",
 | 
			
		||||
			"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,8 @@
 | 
			
		||||
		"@sveltejs/adapter-auto": "next",
 | 
			
		||||
		"@sveltejs/adapter-node": "next",
 | 
			
		||||
		"@sveltejs/kit": "next",
 | 
			
		||||
		"@testing-library/jest-dom": "^5.16.5",
 | 
			
		||||
		"@testing-library/svelte": "^3.2.1",
 | 
			
		||||
		"@types/bcrypt": "^5.0.0",
 | 
			
		||||
		"@types/cookie": "^0.4.1",
 | 
			
		||||
		"@types/fluent-ffmpeg": "^2.1.20",
 | 
			
		||||
@ -43,7 +45,7 @@
 | 
			
		||||
		"svelte": "^3.44.0",
 | 
			
		||||
		"svelte-check": "^2.7.1",
 | 
			
		||||
		"svelte-jester": "^2.3.2",
 | 
			
		||||
		"svelte-preprocess": "^4.10.6",
 | 
			
		||||
		"svelte-preprocess": "^4.10.7",
 | 
			
		||||
		"tailwindcss": "^3.0.24",
 | 
			
		||||
		"tslib": "^2.3.1",
 | 
			
		||||
		"typescript": "^4.7.4",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								web/src/lib/__mocks__/jsdom-url.mock.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								web/src/lib/__mocks__/jsdom-url.mock.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
const createObjectURLMock = jest.fn();
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(URL, 'createObjectURL', {
 | 
			
		||||
	writable: true,
 | 
			
		||||
	value: createObjectURLMock
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export { createObjectURLMock };
 | 
			
		||||
							
								
								
									
										144
									
								
								web/src/lib/components/album-page/__tests__/album-card.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								web/src/lib/components/album-page/__tests__/album-card.spec.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,144 @@
 | 
			
		||||
import { jest, describe, it } from '@jest/globals';
 | 
			
		||||
import { render, RenderResult, waitFor, fireEvent } from '@testing-library/svelte';
 | 
			
		||||
import { createObjectURLMock } from '$lib/__mocks__/jsdom-url.mock';
 | 
			
		||||
import { api, ThumbnailFormat } from '@api';
 | 
			
		||||
import { albumFactory } from '@test-data';
 | 
			
		||||
import AlbumCard from '../album-card.svelte';
 | 
			
		||||
import '@testing-library/jest-dom';
 | 
			
		||||
 | 
			
		||||
jest.mock('@api');
 | 
			
		||||
 | 
			
		||||
const apiMock: jest.MockedObject<typeof api> = api as jest.MockedObject<typeof api>;
 | 
			
		||||
 | 
			
		||||
describe('AlbumCard component', () => {
 | 
			
		||||
	let sut: RenderResult<AlbumCard>;
 | 
			
		||||
 | 
			
		||||
	it.each([
 | 
			
		||||
		{
 | 
			
		||||
			album: albumFactory.build({ albumThumbnailAssetId: null, shared: false, assetCount: 0 }),
 | 
			
		||||
			count: 0,
 | 
			
		||||
			shared: false
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			album: albumFactory.build({ albumThumbnailAssetId: null, shared: true, assetCount: 0 }),
 | 
			
		||||
			count: 0,
 | 
			
		||||
			shared: true
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			album: albumFactory.build({ albumThumbnailAssetId: null, shared: false, assetCount: 5 }),
 | 
			
		||||
			count: 5,
 | 
			
		||||
			shared: false
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			album: albumFactory.build({ albumThumbnailAssetId: null, shared: true, assetCount: 2 }),
 | 
			
		||||
			count: 2,
 | 
			
		||||
			shared: true
 | 
			
		||||
		}
 | 
			
		||||
	])(
 | 
			
		||||
		'shows album data without thumbnail with count $count - shared: $shared',
 | 
			
		||||
		async ({ album, count, shared }) => {
 | 
			
		||||
			sut = render(AlbumCard, { album });
 | 
			
		||||
 | 
			
		||||
			const albumImgElement = sut.getByTestId('album-image');
 | 
			
		||||
			const albumNameElement = sut.getByTestId('album-name');
 | 
			
		||||
			const albumDetailsElement = sut.getByTestId('album-details');
 | 
			
		||||
			const detailsText = `${count} items` + (shared ? ' . Shared' : '');
 | 
			
		||||
			// TODO: is this a bug?
 | 
			
		||||
			expect(albumImgElement).toHaveAttribute('src', '/api/asset/thumbnail/null?format=WEBP');
 | 
			
		||||
			expect(albumImgElement).toHaveAttribute('alt', album.id);
 | 
			
		||||
 | 
			
		||||
			await waitFor(() => expect(albumImgElement).toHaveAttribute('src', 'no-thumbnail.png'));
 | 
			
		||||
 | 
			
		||||
			expect(albumImgElement).toHaveAttribute('alt', album.id);
 | 
			
		||||
			expect(apiMock.assetApi.getAssetThumbnail).not.toHaveBeenCalled();
 | 
			
		||||
 | 
			
		||||
			expect(albumNameElement).toHaveTextContent(album.albumName);
 | 
			
		||||
			expect(albumDetailsElement).toHaveTextContent(new RegExp(detailsText));
 | 
			
		||||
		}
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	it('shows album data and and loads the thumbnail image when available', async () => {
 | 
			
		||||
		const thumbnailBlob = new Blob();
 | 
			
		||||
		const thumbnailUrl = 'blob:thumbnailUrlOne';
 | 
			
		||||
		apiMock.assetApi.getAssetThumbnail.mockResolvedValue({
 | 
			
		||||
			data: thumbnailBlob,
 | 
			
		||||
			config: {},
 | 
			
		||||
			headers: {},
 | 
			
		||||
			status: 200,
 | 
			
		||||
			statusText: ''
 | 
			
		||||
		});
 | 
			
		||||
		createObjectURLMock.mockReturnValueOnce(thumbnailUrl);
 | 
			
		||||
 | 
			
		||||
		const album = albumFactory.build({
 | 
			
		||||
			albumThumbnailAssetId: 'thumbnailIdOne',
 | 
			
		||||
			shared: false,
 | 
			
		||||
			albumName: 'some album name'
 | 
			
		||||
		});
 | 
			
		||||
		sut = render(AlbumCard, { album });
 | 
			
		||||
 | 
			
		||||
		const albumImgElement = sut.getByTestId('album-image');
 | 
			
		||||
		const albumNameElement = sut.getByTestId('album-name');
 | 
			
		||||
		const albumDetailsElement = sut.getByTestId('album-details');
 | 
			
		||||
		// TODO: is this expected?
 | 
			
		||||
		expect(albumImgElement).toHaveAttribute(
 | 
			
		||||
			'src',
 | 
			
		||||
			'/api/asset/thumbnail/thumbnailIdOne?format=WEBP'
 | 
			
		||||
		);
 | 
			
		||||
		expect(albumImgElement).toHaveAttribute('alt', album.id);
 | 
			
		||||
 | 
			
		||||
		await waitFor(() => expect(albumImgElement).toHaveAttribute('src', thumbnailUrl));
 | 
			
		||||
 | 
			
		||||
		expect(albumImgElement).toHaveAttribute('alt', album.id);
 | 
			
		||||
		expect(apiMock.assetApi.getAssetThumbnail).toHaveBeenCalledTimes(1);
 | 
			
		||||
		expect(apiMock.assetApi.getAssetThumbnail).toHaveBeenCalledWith(
 | 
			
		||||
			'thumbnailIdOne',
 | 
			
		||||
			ThumbnailFormat.Jpeg,
 | 
			
		||||
			{ responseType: 'blob' }
 | 
			
		||||
		);
 | 
			
		||||
		expect(createObjectURLMock).toHaveBeenCalledWith(thumbnailBlob);
 | 
			
		||||
 | 
			
		||||
		expect(albumNameElement).toHaveTextContent('some album name');
 | 
			
		||||
		expect(albumDetailsElement).toHaveTextContent('0 items');
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	describe('with rendered component - no thumbnail', () => {
 | 
			
		||||
		const album = Object.freeze(albumFactory.build({ albumThumbnailAssetId: null }));
 | 
			
		||||
 | 
			
		||||
		beforeEach(async () => {
 | 
			
		||||
			sut = render(AlbumCard, { album });
 | 
			
		||||
 | 
			
		||||
			const albumImgElement = sut.getByTestId('album-image');
 | 
			
		||||
			await waitFor(() => expect(albumImgElement).toHaveAttribute('src', 'no-thumbnail.png'));
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		it('dispatches custom "click" event with the album in context', async () => {
 | 
			
		||||
			const onClickHandler = jest.fn();
 | 
			
		||||
			sut.component.$on('click', onClickHandler);
 | 
			
		||||
			const albumCardElement = sut.getByTestId('album-card');
 | 
			
		||||
 | 
			
		||||
			await fireEvent.click(albumCardElement);
 | 
			
		||||
			expect(onClickHandler).toHaveBeenCalledTimes(1);
 | 
			
		||||
			expect(onClickHandler).toHaveBeenCalledWith(expect.objectContaining({ detail: album }));
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		it('dispatches custom "click" event on context menu click with mouse coordinates', async () => {
 | 
			
		||||
			const onClickHandler = jest.fn();
 | 
			
		||||
			sut.component.$on('showalbumcontextmenu', onClickHandler);
 | 
			
		||||
 | 
			
		||||
			const contextMenuBtnParent = sut.getByTestId('context-button-parent');
 | 
			
		||||
 | 
			
		||||
			await fireEvent(
 | 
			
		||||
				contextMenuBtnParent,
 | 
			
		||||
				new MouseEvent('click', {
 | 
			
		||||
					clientX: 123,
 | 
			
		||||
					clientY: 456
 | 
			
		||||
				})
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
			expect(onClickHandler).toHaveBeenCalledTimes(1);
 | 
			
		||||
			expect(onClickHandler).toHaveBeenCalledWith(
 | 
			
		||||
				expect.objectContaining({ detail: { x: 123, y: 456 } })
 | 
			
		||||
			);
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
});
 | 
			
		||||
@ -53,11 +53,13 @@
 | 
			
		||||
<div
 | 
			
		||||
	class="h-[339px] w-[275px] hover:cursor-pointer mt-4 relative"
 | 
			
		||||
	on:click={() => dispatchClick('click', album)}
 | 
			
		||||
	data-testid="album-card"
 | 
			
		||||
>
 | 
			
		||||
	<div
 | 
			
		||||
		id={`icon-${album.id}`}
 | 
			
		||||
		class="absolute top-2 right-2"
 | 
			
		||||
		on:click|stopPropagation|preventDefault={showAlbumContextMenu}
 | 
			
		||||
		data-testid="context-button-parent"
 | 
			
		||||
	>
 | 
			
		||||
		<CircleIconButton
 | 
			
		||||
			logo={DotsVertical}
 | 
			
		||||
@ -72,15 +74,16 @@
 | 
			
		||||
			src={imageData}
 | 
			
		||||
			alt={album.id}
 | 
			
		||||
			class={`object-cover h-full w-full transition-all z-0 rounded-xl duration-300 hover:shadow-lg`}
 | 
			
		||||
			data-testid="album-image"
 | 
			
		||||
		/>
 | 
			
		||||
	</div>
 | 
			
		||||
 | 
			
		||||
	<div class="mt-4">
 | 
			
		||||
		<p class="text-sm font-medium text-gray-800">
 | 
			
		||||
		<p class="text-sm font-medium text-gray-800" data-testid="album-name">
 | 
			
		||||
			{album.albumName}
 | 
			
		||||
		</p>
 | 
			
		||||
 | 
			
		||||
		<span class="text-xs flex gap-2">
 | 
			
		||||
		<span class="text-xs flex gap-2" data-testid="album-details">
 | 
			
		||||
			<p>{album.assetCount} items</p>
 | 
			
		||||
 | 
			
		||||
			{#if album.shared}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user