@icij/murmur-next 4.0.0 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/README.md +15 -19
  2. package/dist/lib/components/AccordionStep.vue.d.ts +79 -0
  3. package/dist/lib/components/AccordionWrapper.vue.d.ts +33 -0
  4. package/dist/lib/components/ActiveTextTruncate.vue.d.ts +101 -0
  5. package/dist/lib/components/AdvancedLinkForm.vue.d.ts +168 -0
  6. package/dist/lib/components/Brand.vue.d.ts +55 -0
  7. package/dist/lib/components/BrandExpansion.vue.d.ts +105 -0
  8. package/dist/lib/components/ConfirmButton.vue.d.ts +158 -0
  9. package/dist/lib/components/ContentPlaceholder.vue.d.ts +44 -0
  10. package/dist/lib/components/CustomPagination.vue.d.ts +130 -0
  11. package/dist/lib/components/DigitsInput.vue.d.ts +66 -0
  12. package/dist/lib/components/DonateForm.vue.d.ts +46 -0
  13. package/dist/lib/components/EmbedForm.vue.d.ts +121 -0
  14. package/dist/lib/components/EmbeddableFooter.vue.d.ts +103 -0
  15. package/dist/lib/components/FollowUsPopover.vue.d.ts +16 -0
  16. package/dist/lib/components/GenericFooter.vue.d.ts +47 -0
  17. package/dist/lib/components/GenericHeader.vue.d.ts +928 -0
  18. package/dist/lib/components/HapticCopy.vue.d.ts +156 -0
  19. package/dist/lib/components/ImddbHeader.vue.d.ts +960 -0
  20. package/dist/lib/components/OrdinalLegend.vue.d.ts +87 -0
  21. package/dist/lib/components/RangePicker.vue.d.ts +196 -0
  22. package/dist/lib/components/ResponsiveIframe.vue.d.ts +45 -0
  23. package/dist/lib/components/ScaleLegend.vue.d.ts +101 -0
  24. package/dist/lib/components/SecretInput.vue.d.ts +99 -0
  25. package/dist/lib/components/SelectableDropdown.vue.d.ts +210 -0
  26. package/dist/lib/components/SharingOptions.vue.d.ts +153 -0
  27. package/dist/lib/components/SharingOptionsLink.vue.d.ts +200 -0
  28. package/dist/lib/components/SignUpForm.vue.d.ts +141 -0
  29. package/dist/lib/components/SlideUpDown.vue.d.ts +74 -0
  30. package/dist/lib/components/TexturedDeck.vue.d.ts +89 -0
  31. package/dist/lib/components/TinyPagination.vue.d.ts +188 -0
  32. package/dist/lib/composables/chart.d.ts +48 -0
  33. package/dist/lib/composables/resizeObserver.d.ts +22 -0
  34. package/dist/lib/composables/sendEmail.d.ts +6 -0
  35. package/dist/lib/config.d.ts +19 -0
  36. package/dist/lib/config.default.d.ts +34 -0
  37. package/dist/lib/datavisualisations/BarChart.vue.d.ts +234 -0
  38. package/dist/lib/datavisualisations/ColumnChart.vue.d.ts +404 -0
  39. package/dist/lib/datavisualisations/LineChart.vue.d.ts +200 -0
  40. package/dist/lib/datavisualisations/StackedBarChart.vue.d.ts +342 -0
  41. package/dist/lib/datavisualisations/StackedColumnChart.vue.d.ts +412 -0
  42. package/dist/lib/enums.d.ts +32 -0
  43. package/dist/lib/i18n.d.ts +4 -0
  44. package/dist/lib/keys.d.ts +2 -0
  45. package/dist/lib/main.d.ts +52 -0
  46. package/dist/lib/maps/ChoroplethMap.vue.d.ts +460 -0
  47. package/dist/lib/maps/ChoroplethMapAnnotation.vue.d.ts +188 -0
  48. package/dist/lib/maps/SymbolMap.vue.d.ts +276 -0
  49. package/dist/lib/murmur.css +1 -0
  50. package/dist/lib/murmur.js +44661 -0
  51. package/dist/lib/murmur.js.map +1 -0
  52. package/dist/lib/murmur.umd.cjs +837 -0
  53. package/dist/lib/murmur.umd.cjs.map +1 -0
  54. package/dist/lib/types.d.ts +44 -0
  55. package/dist/lib/utils/animation.d.ts +8 -0
  56. package/dist/lib/utils/assets.d.ts +2 -0
  57. package/dist/lib/utils/clipboard.d.ts +2 -0
  58. package/dist/lib/utils/iframe-resizer.d.ts +10 -0
  59. package/dist/lib/utils/placeholder.d.ts +12 -0
  60. package/dist/lib/utils/placeholderTypes.d.ts +18 -0
  61. package/dist/lib/utils/strings.d.ts +1 -0
  62. package/lib/components/AccordionStep.vue +53 -42
  63. package/lib/components/AccordionWrapper.vue +25 -24
  64. package/lib/components/ActiveTextTruncate.vue +44 -22
  65. package/lib/components/AdvancedLinkForm.vue +96 -46
  66. package/lib/components/Brand.vue +30 -23
  67. package/lib/components/BrandExpansion.vue +12 -3
  68. package/lib/components/ConfirmButton.vue +30 -26
  69. package/lib/components/ContentPlaceholder.vue +11 -7
  70. package/lib/components/CustomPagination.vue +50 -32
  71. package/lib/components/DigitsInput.vue +64 -60
  72. package/lib/components/DonateForm.vue +112 -83
  73. package/lib/components/EmbedForm.vue +37 -21
  74. package/lib/components/EmbeddableFooter.vue +14 -10
  75. package/lib/components/FollowUsPopover.vue +42 -40
  76. package/lib/components/GenericFooter.vue +98 -23
  77. package/lib/components/GenericHeader.vue +66 -29
  78. package/lib/components/HapticCopy.vue +41 -29
  79. package/lib/components/ImddbHeader.vue +113 -92
  80. package/lib/components/OrdinalLegend.vue +43 -20
  81. package/lib/components/RangePicker.vue +63 -42
  82. package/lib/components/ResponsiveIframe.vue +9 -2
  83. package/lib/components/ScaleLegend.vue +56 -18
  84. package/lib/components/SecretInput.vue +7 -8
  85. package/lib/components/SelectableDropdown.vue +119 -74
  86. package/lib/components/SharingOptions.vue +93 -36
  87. package/lib/components/SharingOptionsLink.vue +11 -5
  88. package/lib/components/SignUpForm.vue +44 -23
  89. package/lib/components/SlideUpDown.vue +7 -2
  90. package/lib/components/TexturedDeck.vue +24 -14
  91. package/lib/components/TinyPagination.vue +35 -22
  92. package/lib/composables/chart.ts +174 -157
  93. package/lib/composables/resizeObserver.ts +29 -29
  94. package/lib/composables/sendEmail.ts +53 -42
  95. package/lib/config.default.ts +17 -10
  96. package/lib/config.ts +34 -27
  97. package/lib/datavisualisations/BarChart.vue +48 -42
  98. package/lib/datavisualisations/ColumnChart.vue +133 -89
  99. package/lib/datavisualisations/LineChart.vue +79 -57
  100. package/lib/datavisualisations/StackedBarChart.vue +116 -68
  101. package/lib/datavisualisations/StackedColumnChart.vue +196 -115
  102. package/lib/enums.ts +25 -15
  103. package/lib/i18n.ts +3 -3
  104. package/lib/keys.ts +2 -2
  105. package/lib/main.ts +14 -10
  106. package/lib/maps/ChoroplethMap.vue +299 -160
  107. package/lib/maps/ChoroplethMapAnnotation.vue +29 -18
  108. package/lib/maps/SymbolMap.vue +194 -123
  109. package/lib/shims-bootstrap-vue.d.ts +1 -1
  110. package/lib/shims-vue.d.ts +3 -3
  111. package/lib/styles/functions.scss +10 -6
  112. package/lib/styles/lib.scss +2 -4
  113. package/lib/styles/mixins.scss +8 -8
  114. package/lib/styles/utilities.scss +1 -1
  115. package/lib/styles/variables.scss +24 -18
  116. package/lib/types.ts +26 -10
  117. package/lib/utils/animation.ts +4 -4
  118. package/lib/utils/assets.ts +31 -28
  119. package/lib/utils/clipboard.ts +16 -10
  120. package/lib/utils/iframe-resizer.ts +18 -13
  121. package/lib/utils/placeholder.ts +54 -23
  122. package/lib/utils/placeholderTypes.ts +3 -3
  123. package/package.json +21 -2
  124. package/.github/workflows/deploy-github-pages.yaml +0 -50
  125. package/.storybook/app.scss +0 -14
  126. package/.storybook/doc_variables.scss +0 -20
  127. package/.storybook/main.ts +0 -35
  128. package/.storybook/preview-head.html +0 -2
  129. package/.storybook/preview.ts +0 -32
  130. package/deploy.js +0 -15
  131. package/docs/components/ApiTable.vue +0 -171
  132. package/docs/components/App.vue +0 -146
  133. package/docs/components/CollapsibleBlock.vue +0 -122
  134. package/docs/components/DocsHeader.vue +0 -68
  135. package/docs/components/DocsMenu.vue +0 -201
  136. package/docs/components/DocsMenuSection.vue +0 -109
  137. package/docs/components/EditLink.vue +0 -49
  138. package/docs/components/OutboundLink.vue +0 -13
  139. package/docs/components/PalettePresenter.vue +0 -96
  140. package/docs/components/RepositoryLink.vue +0 -28
  141. package/docs/components/SampleCard.vue +0 -119
  142. package/docs/main.js +0 -42
  143. package/docs/pages/components/accordion/doc.md +0 -96
  144. package/docs/pages/components/active-text-truncate/doc.md +0 -44
  145. package/docs/pages/components/advanced-link-form/doc.md +0 -105
  146. package/docs/pages/components/brand/doc.md +0 -30
  147. package/docs/pages/components/brand-expansion/doc.md +0 -70
  148. package/docs/pages/components/confirm-button/doc.md +0 -91
  149. package/docs/pages/components/content-placeholder/doc.md +0 -16
  150. package/docs/pages/components/custom-pagination/doc.md +0 -61
  151. package/docs/pages/components/digits-input/doc.md +0 -28
  152. package/docs/pages/components/donate-form/doc.md +0 -20
  153. package/docs/pages/components/embed-form/doc.md +0 -22
  154. package/docs/pages/components/embeddable-footer/doc.md +0 -60
  155. package/docs/pages/components/follow-us-popover/doc.md +0 -5
  156. package/docs/pages/components/generic-footer/doc.md +0 -21
  157. package/docs/pages/components/generic-header/doc.md +0 -24
  158. package/docs/pages/components/haptic-copy/doc.md +0 -27
  159. package/docs/pages/components/imddb-header/doc.md +0 -23
  160. package/docs/pages/components/ordinal-legend/doc.md +0 -44
  161. package/docs/pages/components/range-picker/doc.md +0 -86
  162. package/docs/pages/components/responsive-iframe/doc.md +0 -13
  163. package/docs/pages/components/scale-legend/doc.md +0 -65
  164. package/docs/pages/components/secret-input/doc.md +0 -12
  165. package/docs/pages/components/selectable-dropdown/doc.md +0 -156
  166. package/docs/pages/components/sharing-options/doc.md +0 -13
  167. package/docs/pages/components/sharing-options-link/doc.md +0 -36
  168. package/docs/pages/components/sign-up-form/doc.md +0 -13
  169. package/docs/pages/components/slide-up-down/doc.md +0 -28
  170. package/docs/pages/components/textured-deck/doc.md +0 -78
  171. package/docs/pages/components/tiny-pagination/doc.md +0 -92
  172. package/docs/pages/datavisualisation/bars/doc.md +0 -110
  173. package/docs/pages/datavisualisation/columns/doc.md +0 -165
  174. package/docs/pages/datavisualisation/lines/doc.md +0 -139
  175. package/docs/pages/datavisualisation/stacked-bar/doc.md +0 -160
  176. package/docs/pages/datavisualisation/stacked-column/doc.md +0 -191
  177. package/docs/pages/getting-started/about-icij/doc.md +0 -13
  178. package/docs/pages/getting-started/custom-bootstrap/doc.md +0 -36
  179. package/docs/pages/getting-started/installation-guide/doc.md +0 -59
  180. package/docs/pages/getting-started/internationalization/doc.md +0 -74
  181. package/docs/pages/maps/choropleth-map/doc.md +0 -420
  182. package/docs/pages/maps/choropleth-map-annotation/doc.md +0 -373
  183. package/docs/pages/maps/symbol-map/doc.md +0 -203
  184. package/docs/pages/structure/breakpoints/doc.md +0 -3
  185. package/docs/pages/structure/grid/doc.md +0 -3
  186. package/docs/pages/utilities/assets/doc.md +0 -138
  187. package/docs/pages/utilities/config/doc.md +0 -52
  188. package/docs/pages/utilities/iframes/doc.md +0 -3
  189. package/docs/pages/visual/colors/doc.md +0 -31
  190. package/docs/pages/visual/iconography/doc.md +0 -56
  191. package/docs/pages/visual/states/doc.md +0 -77
  192. package/docs/pages/visual/themes/doc.md +0 -3
  193. package/docs/pages/visual/typography/doc.md +0 -71
  194. package/docs/routes.js +0 -25
  195. package/docs/store/index.js +0 -21
  196. package/docs/styles/app.scss +0 -36
  197. package/docs/styles/variables.scss +0 -20
  198. package/loaders/highlight-loader.js +0 -13
  199. package/loaders/markdown-loader.js +0 -91
  200. package/loaders/metadata-loader.js +0 -18
  201. package/loaders/sass-extract-loader.js +0 -14
  202. package/loaders/vue-docgen-loader.js +0 -14
  203. package/plugins/MdPluginTypes.ts +0 -10
  204. package/plugins/docs.ts +0 -50
  205. package/plugins/front-matter.ts +0 -36
  206. package/plugins/highlight.ts +0 -27
  207. package/plugins/markdown-it/api-table.ts +0 -25
  208. package/plugins/markdown-it/sample-card.ts +0 -31
  209. package/plugins/plugin-delete.ts +0 -47
  210. package/plugins/plugin-docgen.ts +0 -23
  211. package/plugins/sass-vars.ts +0 -25
  212. package/plugins/vue-docgen.ts +0 -29
  213. package/public/android-chrome-192x192.png +0 -0
  214. package/public/android-chrome-512x512.png +0 -0
  215. package/public/apple-touch-icon.png +0 -0
  216. package/public/assets/img/arrow-bottom.svg +0 -3
  217. package/public/assets/img/texture-brick-black.jpg +0 -0
  218. package/public/assets/img/texture-brick.jpg +0 -0
  219. package/public/assets/img/texture-carbon-black.jpg +0 -0
  220. package/public/assets/img/texture-carbon.jpg +0 -0
  221. package/public/assets/img/texture-crack-black.jpg +0 -0
  222. package/public/assets/img/texture-crack.jpg +0 -0
  223. package/public/assets/img/texture-rock-black.jpg +0 -0
  224. package/public/assets/img/texture-rock.jpg +0 -0
  225. package/public/assets/img/texture-sand-black.jpg +0 -0
  226. package/public/assets/img/texture-sand.jpg +0 -0
  227. package/public/assets/img/texture-silk-black.jpg +0 -0
  228. package/public/assets/img/texture-silk.jpg +0 -0
  229. package/public/assets/topojson/france-departments.json +0 -1
  230. package/public/assets/topojson/paris-arrondissements.json +0 -1
  231. package/public/assets/topojson/world-countries-sans-antarctica.json +0 -1
  232. package/public/favicon-16x16.png +0 -0
  233. package/public/favicon-32x32.png +0 -0
  234. package/public/favicon.ico +0 -0
  235. package/public/site.webmanifest +0 -1
  236. package/stories/assets/code-brackets.svg +0 -1
  237. package/stories/assets/colors.svg +0 -1
  238. package/stories/assets/comments.svg +0 -1
  239. package/stories/assets/direction.svg +0 -1
  240. package/stories/assets/flow.svg +0 -1
  241. package/stories/assets/plugin.svg +0 -1
  242. package/stories/assets/repo.svg +0 -1
  243. package/stories/assets/stackalt.svg +0 -1
  244. package/stories/getting-started/about-icij.mdx +0 -14
  245. package/stories/getting-started/custom-bootstrap.mdx +0 -23
  246. package/stories/getting-started/installation-guide.mdx +0 -62
  247. package/stories/getting-started/internationalization.mdx +0 -63
  248. package/stories/murmur/components/AccordionStep.stories.ts +0 -33
  249. package/stories/murmur/components/AccordionWrapper.stories.ts +0 -69
  250. package/stories/murmur/components/ActiveTextTruncate.stories.ts +0 -32
  251. package/stories/murmur/components/AdvancedLinkForm.stories.ts +0 -77
  252. package/stories/murmur/components/Brand.stories.ts +0 -30
  253. package/stories/murmur/components/BrandExpansion.stories.ts +0 -41
  254. package/stories/murmur/components/ConfirmButton.stories.ts +0 -40
  255. package/stories/murmur/components/ContentPlaceholder.stories.ts +0 -41
  256. package/stories/murmur/components/CustomPagination.stories.ts +0 -42
  257. package/stories/murmur/components/DigitsInput.stories.ts +0 -29
  258. package/stories/murmur/components/DonateForm.stories.ts +0 -29
  259. package/stories/murmur/components/EmbedForm.stories.ts +0 -35
  260. package/stories/murmur/components/EmbeddableFooter.stories.ts +0 -59
  261. package/stories/murmur/components/FollowUsPopover.stories.ts +0 -24
  262. package/stories/murmur/components/GenericFooter.stories.ts +0 -27
  263. package/stories/murmur/components/GenericHeader.stories.ts +0 -27
  264. package/stories/murmur/components/HapticCopy.stories.ts +0 -40
  265. package/stories/murmur/components/ImddbHeader.stories.ts +0 -27
  266. package/stories/murmur/components/OrdinalLegend.stories.ts +0 -49
  267. package/stories/murmur/components/RangePicker.stories.ts +0 -98
  268. package/stories/murmur/components/ResponsiveIframe.stories.ts +0 -24
  269. package/stories/murmur/components/ScaleLegend.stories.ts +0 -65
  270. package/stories/murmur/components/SecretInput.stories.ts +0 -60
  271. package/stories/murmur/components/SelectableDropdown.stories.ts +0 -143
  272. package/stories/murmur/components/SharingOptions.stories.ts +0 -32
  273. package/stories/murmur/components/SharingOptionsLink.stories.ts +0 -53
  274. package/stories/murmur/components/SignUpForm.stories.ts +0 -51
  275. package/stories/murmur/components/SlideUpDown.stories.ts +0 -32
  276. package/stories/murmur/components/TexturedDeck.stories.ts +0 -83
  277. package/stories/murmur/components/TinyPagination.stories.ts +0 -65
  278. package/stories/murmur/datavisualisations/BarChart.stories.ts +0 -54
  279. package/stories/murmur/datavisualisations/ColumnChart.stories.ts +0 -88
  280. package/stories/murmur/datavisualisations/LineChart.stories.ts +0 -139
  281. package/stories/murmur/datavisualisations/StackedBarChart.stories.ts +0 -199
  282. package/stories/murmur/datavisualisations/StackedColumnChart.stories.ts +0 -136
  283. package/stories/murmur/decorators.ts +0 -108
  284. package/stories/murmur/maps/ChoroplethMap.stories.ts +0 -440
  285. package/stories/murmur/maps/ChoroplethMapAnnotation.stories.ts +0 -26
  286. package/stories/murmur/maps/SymbolMap.stories.ts +0 -24
  287. package/stories/murmur/utils.ts +0 -7
  288. package/tests/unit/components/AccordionStep.spec.ts +0 -157
  289. package/tests/unit/components/AccordionWrapper.spec.ts +0 -57
  290. package/tests/unit/components/ActiveTextTruncate.spec.js +0 -30
  291. package/tests/unit/components/AdvancedLinkForm.spec.js +0 -124
  292. package/tests/unit/components/Brand.spec.js +0 -50
  293. package/tests/unit/components/ContentPlaceholder.spec.js +0 -29
  294. package/tests/unit/components/CustomPagination.spec.js +0 -72
  295. package/tests/unit/components/DigitsInput.spec.ts +0 -157
  296. package/tests/unit/components/DonateForm.spec.js +0 -149
  297. package/tests/unit/components/EmbedForm.spec.js +0 -108
  298. package/tests/unit/components/EmbeddableFooter.spec.js +0 -11
  299. package/tests/unit/components/Fa.spec.js +0 -18
  300. package/tests/unit/components/FollowUsPopover.spec.js +0 -29
  301. package/tests/unit/components/GenericFooter.spec.js +0 -29
  302. package/tests/unit/components/GenericHeader.spec.js +0 -104
  303. package/tests/unit/components/HapticCopy.spec.js +0 -123
  304. package/tests/unit/components/ImddbHeader.spec.js +0 -96
  305. package/tests/unit/components/OrdinalLegend.spec.js +0 -120
  306. package/tests/unit/components/RangePicker.spec.ts +0 -87
  307. package/tests/unit/components/ResponsiveIframe.spec.js +0 -20
  308. package/tests/unit/components/ScaleLegend.spec.js +0 -139
  309. package/tests/unit/components/SecretInput.spec.js +0 -81
  310. package/tests/unit/components/SelectableDropdown.spec.js +0 -160
  311. package/tests/unit/components/SharingOptions.spec.js +0 -125
  312. package/tests/unit/components/SharingOptionsLink.spec.js +0 -184
  313. package/tests/unit/components/SignUpForm.spec.js +0 -145
  314. package/tests/unit/components/SlideUpDown.spec.js +0 -59
  315. package/tests/unit/components/TinyPagination.spec.js +0 -46
  316. package/tests/unit/config.spec.js +0 -136
  317. package/tests/unit/datavisualisations/BarChart.spec.js +0 -63
  318. package/tests/unit/datavisualisations/ColumnChart.spec.js +0 -344
  319. package/tests/unit/datavisualisations/LineChart.spec.js +0 -155
  320. package/tests/unit/datavisualisations/StackedBarChart.spec.js +0 -294
  321. package/tests/unit/datavisualisations/StackedColumnChart.spec.js +0 -443
  322. package/tests/unit/i18n.spec.ts +0 -19
  323. package/tests/unit/main.spec.js +0 -82
  324. package/tests/unit/maps/ChoroplethMap.spec.js +0 -214
  325. package/tests/unit/maps/ChoroplethMapAnnotation.spec.ts +0 -186
  326. package/tests/unit/maps/SymbolMap.spec.js +0 -92
  327. package/tests/unit/require.spec.js +0 -22
  328. package/tests/unit/setup.js +0 -13
  329. package/tests/unit/utils/assets.spec.js +0 -61
  330. package/tests/unit/utils/clipboard.spec.js +0 -18
  331. package/tests/unit/utils/iframe-resizer.spec.js +0 -71
  332. package/tsconfig.json +0 -35
  333. package/vite.config.ts +0 -79
  334. package/vitest.config.ts +0 -19
@@ -1,214 +0,0 @@
1
- import { promises as fs } from 'fs'
2
- import { join, resolve } from 'path'
3
- import { zipObjectDeep } from 'lodash'
4
- import { shallowMount,flushPromises } from '@vue/test-utils'
5
- import ChoroplethMap from '@/maps/ChoroplethMap.vue'
6
-
7
- vi.mock('d3', async () => {
8
- return {
9
- ...(await vi.importActual('d3')),
10
- json: async url => {
11
- const pathname = url.split('https://icij.github.io/murmur/').pop()
12
- const abspath = resolve(__dirname, join('../../../public', pathname))
13
- const raw = await fs.readFile(abspath, 'UTF-8')
14
- return JSON.parse(raw)
15
- },
16
- zoom() {
17
- const zoom = {
18
- scaleExtent: () => zoom,
19
- translateExtent: () => zoom,
20
- transform: () => null,
21
- on: () => zoom
22
- }
23
- return zoom
24
- }
25
- }
26
- })
27
-
28
- describe('ChoroplethMap.vue', () => {
29
-
30
- describe('a map of the world', () => {
31
-
32
- let wrapper
33
-
34
- beforeEach(async () => {
35
- const propsData = {
36
- data: {
37
- FRA: 100,
38
- SRB: 150,
39
- KGZ: 200
40
- },
41
- }
42
- wrapper = shallowMount(ChoroplethMap, { propsData, global:{renderDefaultStub:true} })
43
- wrapper.vm.$refs.resizable.style.width = '500px'
44
- await wrapper.vm.loadTopojson()
45
- await wrapper.vm.$nextTick()
46
- })
47
-
48
- it('is a Vue instance', () => {
49
- expect(wrapper.vm).toBeTruthy()
50
- })
51
-
52
- it('has a feature for KGZ with the end color of the scale', () => {
53
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-kgz')
54
- const color = window.getComputedStyle(feature.wrapperElement).color
55
- expect(color).toBe('rgb(133, 35, 8)')
56
- })
57
-
58
- it('has a feature for SRV with the middle color of the scale', () => {
59
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-srb')
60
- const color = window.getComputedStyle(feature.element).color
61
- expect(color).toBe('rgb(194, 145, 132)')
62
- })
63
-
64
- it('has a feature for FRA with the start color of the scale', () => {
65
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-fra')
66
- const color = window.getComputedStyle(feature.element).color
67
- expect(color).toBe('rgb(255, 255, 255)')
68
- })
69
-
70
- it('activates the cursor when mouse is over a feature', () => {
71
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-kgz')
72
- feature.element.dispatchEvent(new Event('mouseover'))
73
- expect(wrapper.vm.featureCursor).toBe('KGZ')
74
- })
75
-
76
- it('changes the cursor when mouse is over another feature', () => {
77
- wrapper.vm.updateFeatureCursor('KGZ')
78
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-fra')
79
- feature.element.dispatchEvent(new Event('mouseover'))
80
- expect(wrapper.vm.featureCursor).toBe('FRA')
81
- })
82
-
83
- it('deactivates the cursor when mouse leaves a feature', () => {
84
- wrapper.vm.updateFeatureCursor('KGZ')
85
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-kgz')
86
- feature.element.dispatchEvent(new Event('mouseleave'))
87
- expect(wrapper.vm.featureCursor).toBeNull()
88
- })
89
-
90
- it('doesnt actve the cursor when mouse is over a feature without data', () => {
91
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-usa')
92
- feature.element.dispatchEvent(new Event('mouseover'))
93
- expect(wrapper.vm.featureCursor).toBeNull()
94
- })
95
-
96
- it('set a class to the component when a cursor is active', async () => {
97
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-kgz')
98
- feature.element.dispatchEvent(new Event('mouseover'))
99
- await wrapper.vm.$nextTick()
100
- expect(wrapper.classes('choropleth-map--has-cursor')).toBeTruthy()
101
- })
102
-
103
- it('remove the class to the component when a cursor is removed', async () => {
104
- wrapper.vm.updateFeatureCursor('KGZ')
105
- await wrapper.vm.$nextTick()
106
- expect(wrapper.classes('choropleth-map--has-cursor')).toBeTruthy()
107
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-kgz')
108
- feature.element.dispatchEvent(new Event('mouseleave'))
109
- await wrapper.vm.$nextTick()
110
- expect(wrapper.classes('choropleth-map--has-cursor')).toBeFalsy()
111
- })
112
- })
113
-
114
-
115
- describe('a clickable map of france with data on 3 departments', () => {
116
-
117
- let wrapper
118
-
119
- beforeEach(async () => {
120
- const propsData = {
121
- topojsonUrl: '/assets/topojson/france-departments.json',
122
- topojsonObjects: 'departements',
123
- topojsonObjectsPath: 'properties.code',
124
- clickable: true,
125
- transitionDuration: 0,
126
- data: {
127
- "01": 100,
128
- "02": 150,
129
- "03": 200
130
- }
131
- }
132
- wrapper = shallowMount(ChoroplethMap, { propsData })
133
- wrapper.vm.$refs.resizable.style.width = '500px'
134
- await wrapper.vm.loadTopojson()
135
- await wrapper.vm.$nextTick()
136
- // Since JSDOM badly lack SVG support, we need to mock
137
- // some low level attributes such as size of the SVG element.
138
- wrapper.vm.setMapNodeSize({
139
- width:zipObjectDeep(['baseVal.width.value'], [500]),
140
- height:zipObjectDeep(['baseVal.height.value'], [300])
141
- })
142
- })
143
-
144
- it('is a Vue instance', () => {
145
- expect(wrapper.vm).toBeTruthy()
146
- })
147
-
148
- it('has a feature for 01 with the start color of the scale', () => {
149
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-01')
150
- const color = window.getComputedStyle(feature.element).color
151
- expect(color).toBe('rgb(255, 255, 255)')
152
- })
153
-
154
- it('has a feature for 02 with the middle color of the scale', () => {
155
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-02')
156
- const color = window.getComputedStyle(feature.element).color
157
- expect(color).toBe('rgb(194, 145, 132)')
158
- })
159
-
160
- it('has a feature for 03 with the end color of the scale', () => {
161
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
162
- const color = window.getComputedStyle(feature.element).color
163
- expect(color).toBe('rgb(133, 35, 8)')
164
- })
165
-
166
- it('zooms on the map when a feature is clicked', async () => {
167
-
168
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
169
- await feature.trigger('click')
170
-
171
- const zoomed = wrapper.emitted("zoomed");
172
-
173
- expect(zoomed).toHaveLength(1)
174
- expect(zoomed[0][0]).toMatchObject({"properties": {
175
- "code": "03",
176
- "nom": "Allier",
177
- }})
178
- })
179
-
180
- it('adds a class to a feature upon click', async () => {
181
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
182
- await feature.trigger('click')
183
- const updatedFeature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
184
- expect(updatedFeature.classes('choropleth-map__main__features__item--zoomed')).toBeTruthy()
185
- expect(wrapper.emitted("zoomed")).toHaveLength(1)
186
- })
187
-
188
- it('removes a class from a feature on the second click', async () => {
189
-
190
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
191
- await feature.trigger('click')
192
- await feature.trigger('click')
193
-
194
-
195
- expect(wrapper.emitted("click")).toHaveLength(2)
196
- expect(wrapper.emitted("zoomed")).toHaveLength(1)
197
- expect(feature.classes('choropleth-map__main__features__item--zoomed')).toBeFalsy()
198
- })
199
-
200
- it('adds a class to the map upon click on a feature', async () => {
201
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
202
- await feature.trigger('click')
203
- expect(wrapper.classes('choropleth-map--has-zoom')).toBeTruthy()
204
- })
205
-
206
- it('removes a class from the map on the second click', async () => {
207
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
208
- await feature.trigger('click')
209
- await feature.trigger('click')
210
- await wrapper.vm.$nextTick()
211
- expect(wrapper.classes('choropleth-map--has-zoom')).toBeFalsy()
212
- })
213
- })
214
- })
@@ -1,186 +0,0 @@
1
- import {describe, expect, it} from 'vitest'
2
- import {shallowMount} from '@vue/test-utils'
3
-
4
- import {default as ChoroplethMapAnnotation, PLACEMENTS} from '@/maps/ChoroplethMapAnnotation.vue'
5
- import type {ParentMap, ParentMapProvide} from "@/types.js";
6
- import {ParentKey} from "@/keys.js";
7
- import {computed} from 'vue';
8
- import {geoRobinson} from 'd3-geo-projection'
9
- import {GeoProjection} from 'd3-geo';
10
-
11
-
12
- describe('ChoroplethMapAnnotation', () => {
13
-
14
- const generateParentMock = ({rX = 0, rY = 0, width = 500, height = 500, k = 1}) => (
15
- {
16
- rotatingMapProjection: computed((): GeoProjection | Function => {
17
- if (rX && rY) {
18
- return () => [rX, rY]
19
- }
20
- return geoRobinson()
21
- }),
22
- mapTransform: computed(() => ({k, x: 0, y: 0, rotateX: 0, rotateY: 0})),
23
- mapRect: computed(() => new DOMRect(0, 0, width, height))
24
- }
25
- )
26
-
27
- it('renders with default props', () => {
28
- const mockParentMap: ParentMap = generateParentMock({})
29
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
30
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
31
- propsData: {
32
- latitude: 0,
33
- longitude: 0
34
- },
35
- global: {provide}
36
- })
37
-
38
- expect(wrapper.exists()).toBe(true)
39
- })
40
-
41
- it('computes position correctly', () => {
42
- const mockParentMap: ParentMap = generateParentMock({rX: 100, rY: 200, k: 1, width: 500, height: 500})
43
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
44
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
45
- propsData: {
46
- latitude: 10,
47
- longitude: 20
48
- },
49
- global: {provide}
50
- })
51
-
52
- expect(wrapper.vm.x).toEqual(100)
53
- expect(wrapper.vm.y).toEqual(200)
54
- })
55
-
56
- describe('placements', () => {
57
- const mockParentMap: ParentMap = generateParentMock({})
58
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
59
- const testPlacement = (placement, expectedResults) => {
60
- it(`computes placement correctly for ${placement}`, () => {
61
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
62
- propsData: {
63
- latitude: 0,
64
- longitude: 0,
65
- placement
66
- },
67
- global: {provide}
68
- })
69
-
70
- expect(wrapper.vm.isRight).toBe(!!expectedResults.isRight)
71
- expect(wrapper.vm.isLeft).toBe(!!expectedResults.isLeft)
72
- expect(wrapper.vm.isTop).toBe(!!expectedResults.isTop)
73
- expect(wrapper.vm.isBottom).toBe(!!expectedResults.isBottom)
74
- expect(wrapper.vm.isCenter).toBe(!!expectedResults.isCenter)
75
- })
76
- }
77
-
78
- testPlacement(PLACEMENTS.TOP, {isTop: true})
79
- testPlacement(PLACEMENTS.TOPLEFT, {isLeft: true, isTop: true})
80
- testPlacement(PLACEMENTS.TOPRIGHT, {isRight: true, isTop: true})
81
- testPlacement(PLACEMENTS.RIGHT, {isRight: true})
82
- testPlacement(PLACEMENTS.RIGHTTOP, {isRight: true, isTop: true})
83
- testPlacement(PLACEMENTS.RIGHTBOTTOM, {isRight: true, isBottom: true})
84
- testPlacement(PLACEMENTS.BOTTOM, {isBottom: true})
85
- testPlacement(PLACEMENTS.BOTTOMLEFT, {isLeft: true, isBottom: true})
86
- testPlacement(PLACEMENTS.BOTTOMRIGHT, {isRight: true, isBottom: true})
87
- testPlacement(PLACEMENTS.LEFT, {isLeft: true})
88
- testPlacement(PLACEMENTS.LEFTTOP, {isLeft: true, isTop: true})
89
- testPlacement(PLACEMENTS.LEFTBOTTOM, {isLeft: true, isBottom: true})
90
- testPlacement(null, {isCenter: true})
91
- })
92
-
93
- describe('wrapperTransformOrigin', () => {
94
- const mockParentMap: ParentMap = generateParentMock({})
95
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
96
- const testTransformOrigin = (placement: string, expectedX: string, expectedY: string) => {
97
- it(`computes wrapperTransformOrigin correctly for ${placement}`, () => {
98
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
99
- propsData: {
100
- latitude: 0,
101
- longitude: 0,
102
- placement
103
- },
104
- global: {provide}
105
- })
106
-
107
- expect(wrapper.vm.wrapperTransformOriginX).toBe(expectedX)
108
- expect(wrapper.vm.wrapperTransformOriginY).toBe(expectedY)
109
- expect(wrapper.vm.wrapperTransformOrigin).toBe(`${expectedX} ${expectedY}`)
110
- })
111
- }
112
-
113
- testTransformOrigin(PLACEMENTS.TOP, 'center', 'bottom')
114
- testTransformOrigin(PLACEMENTS.TOPLEFT, 'right', 'bottom')
115
- testTransformOrigin(PLACEMENTS.TOPRIGHT, 'left', 'bottom')
116
- testTransformOrigin(PLACEMENTS.RIGHT, 'left', 'center')
117
- testTransformOrigin(PLACEMENTS.RIGHTTOP, 'left', 'bottom')
118
- testTransformOrigin(PLACEMENTS.RIGHTBOTTOM, 'left', 'top')
119
- testTransformOrigin(PLACEMENTS.BOTTOM, 'center', 'top')
120
- testTransformOrigin(PLACEMENTS.BOTTOMLEFT, 'right', 'top')
121
- testTransformOrigin(PLACEMENTS.BOTTOMRIGHT, 'left', 'top')
122
- testTransformOrigin(PLACEMENTS.LEFT, 'right', 'center')
123
- testTransformOrigin(PLACEMENTS.LEFTTOP, 'right', 'bottom')
124
- testTransformOrigin(PLACEMENTS.LEFTBOTTOM, 'right', 'top')
125
- })
126
-
127
- describe('transform', () => {
128
-
129
- const mockParentMap: ParentMap = generateParentMock({rX: 100, rY: 200, k: 1, width: 500, height: 500})
130
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
131
- const mountComponentWithProps = (propsData: any) => {
132
- return shallowMount(ChoroplethMapAnnotation, {
133
- propsData,
134
- global: {provide}
135
- })
136
- }
137
-
138
- const testCases = [
139
- {placement: PLACEMENTS.TOP, height: 150, width: 150, translateX: -75, translateY: -150},
140
- {placement: PLACEMENTS.BOTTOM, height: 100, width: 200, translateX: -100, translateY: 0},
141
- {placement: PLACEMENTS.LEFT, height: 200, width: 100, translateX: -100, translateY: -100},
142
- {placement: PLACEMENTS.RIGHT, height: 150, width: 250, translateX: 0, translateY: -75}
143
- ]
144
-
145
- testCases.forEach(({placement, height, width, translateX, translateY}) => {
146
- it(`computes transform correctly for placement ${placement} with height ${height} and width ${width}`, () => {
147
- const wrapper = mountComponentWithProps({latitude: 0, longitude: 0, height, width, placement})
148
-
149
- expect(wrapper.vm.translateX).toBe(translateX)
150
- expect(wrapper.vm.translateY).toBe(translateY)
151
- expect(wrapper.vm.transform).toBe(`translate(${translateX}, ${translateY})`)
152
- })
153
- })
154
- })
155
-
156
- describe('isVisible', () => {
157
- it('is visible when within geoDistanceThreshold', () => {
158
-
159
- const mockParentMap: ParentMap = generateParentMock({})
160
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
161
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
162
- propsData: {
163
- latitude: 10,
164
- longitude: 0
165
- },
166
- global: {provide}
167
- })
168
-
169
- expect(wrapper.vm.isVisible).toBeTruthy()
170
- })
171
-
172
- it('is not visible when outside geoDistanceThreshold', () => {
173
-
174
- const mockParentMap: ParentMap = generateParentMock({rX: 500, rY: 0})
175
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
176
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
177
- propsData: {
178
- latitude: 0,
179
- longitude: 90,
180
- },
181
- global: {provide}
182
- })
183
- expect(wrapper.vm.isVisible).toBeFalsy()
184
- })
185
- })
186
- })
@@ -1,92 +0,0 @@
1
- import { promises as fs } from 'fs'
2
- import { join, resolve } from 'path'
3
- import { shallowMount,flushPromises } from '@vue/test-utils'
4
- import SymbolMap from '@/maps/SymbolMap.vue'
5
-
6
- vi.mock('d3', async () => {
7
- return {
8
- ...await vi.importActual('d3'),
9
- json: async url => {
10
- const pathname = url.split('https://icij.github.io/murmur/').pop()
11
- const abspath = resolve(__dirname, join('../../../public', pathname))
12
- const raw = await fs.readFile(abspath, 'UTF-8')
13
- return JSON.parse(raw)
14
- }
15
- }
16
- })
17
-
18
- describe('SymbolMap.vue', () => {
19
-
20
- describe('a map of the world', () => {
21
-
22
- let wrapper
23
-
24
- beforeEach(async () => {
25
- const propsData = {
26
- hideTooltip: true,
27
- data: [
28
- { id: 1, latitude: 48.859116, longitude: 2.331839, color: '#6e40aa', category: 'TECH', label: 'Paris, France' },
29
- { id: 2, latitude: -34.035875, longitude: 151.194191, color: '#ff5e63', category: 'FINANCE', label: 'Sydney, Australia' },
30
- { id: 3, latitude: 38.9072, longitude: -77.0369, color: '#aff05b', category: 'EDITO', label: 'Washington DC, USA' }
31
- ]
32
- }
33
- wrapper = shallowMount(SymbolMap, { propsData })
34
- wrapper.vm.$refs.el.style.width = '500px'
35
- await wrapper.vm.loadTopojson()
36
- await wrapper.vm.$nextTick()
37
- })
38
-
39
- it('is a Vue instance', () => {
40
- expect(wrapper.vm).toBeTruthy()
41
- })
42
-
43
- it('has a marker in the tech category', () => {
44
- const feature = wrapper.find('.symbol-map__main__markers__item--category-tech path')
45
- const { nodeValue: fill } = feature.wrapperElement.getAttributeNode('fill')
46
- expect(fill).toBe('#6e40aa')
47
- })
48
-
49
- it('activates the cursor when mouse is over a marker', async () => {
50
- const feature = wrapper.find('.symbol-map__main__markers__item--category-tech path')
51
- await feature.trigger("mouseover")
52
- expect(wrapper.vm.markerCursor).toBe(1)
53
- })
54
-
55
- it('has a marker in the finance category', () => {
56
- const feature = wrapper.find('.symbol-map__main__markers__item--category-finance path')
57
- const { nodeValue: fill } = feature.element.getAttributeNode('fill')
58
- expect(fill).toBe('#ff5e63')
59
- })
60
-
61
- it('activates the cursor when mouse is over a marker', async () => {
62
- const feature = wrapper.find('.symbol-map__main__markers__item--category-finance path')
63
- await feature.trigger("mouseover")
64
- expect(wrapper.vm.markerCursor).toBe(2)
65
- })
66
-
67
- it('deactivates the cursor when mouse leaves a marker', async () => {
68
- const feature = wrapper.find('.symbol-map__main__markers__item--category-edito path')
69
- await feature.trigger("mouseover")
70
- expect(wrapper.vm.markerCursor).toBe(3)
71
-
72
- await feature.trigger("mouseleave")
73
- expect(wrapper.vm.markerCursor).toBe(null)
74
- })
75
-
76
- it('set a class to the component when a cursor is active', async () => {
77
- const feature = wrapper.find('.symbol-map__main__markers__item--category-tech path')
78
- await feature.trigger("mouseover")
79
- expect(wrapper.classes('symbol-map--has-cursor')).toBeTruthy()
80
- })
81
-
82
- it('remove the class to the component when a cursor is removed', async () => {
83
- const feature = wrapper.find('.symbol-map__main__markers__item--category-finance path')
84
- await feature.trigger("mouseover")
85
- expect(wrapper.vm.markerCursor).toBe(2)
86
-
87
- expect(wrapper.classes('symbol-map--has-cursor')).toBeTruthy()
88
- await feature.trigger("mouseleave")
89
- expect(wrapper.classes('symbol-map--has-cursor')).toBeFalsy()
90
- })
91
- })
92
- })
@@ -1,22 +0,0 @@
1
- import Murmur from '@/main'
2
-
3
- describe('the library bundle', () => {
4
-
5
- it('should have a list of component', () => {
6
- expect(Murmur.components).toHaveProperty('Brand')
7
- expect(Murmur.components).toHaveProperty('ContentPlaceholder')
8
- expect(Murmur.components).toHaveProperty('DonateForm')
9
- expect(Murmur.components).toHaveProperty('EmbeddableFooter')
10
- expect(Murmur.components).toHaveProperty('EmbedForm')
11
- expect(Murmur.components).toHaveProperty('FollowUsPopover')
12
- expect(Murmur.components).toHaveProperty('Fa')
13
- expect(Murmur.components).toHaveProperty('GenericFooter')
14
- expect(Murmur.components).toHaveProperty('GenericHeader')
15
- expect(Murmur.components).toHaveProperty('ImddbHeader')
16
- expect(Murmur.components).toHaveProperty('ResponsiveIframe')
17
- expect(Murmur.components).toHaveProperty('SharingOptions')
18
- expect(Murmur.components).toHaveProperty('SignUpForm')
19
- expect(Murmur.components).toHaveProperty('SlideUpDown')
20
- })
21
-
22
- })
@@ -1,13 +0,0 @@
1
- import { config } from '@vue/test-utils';
2
- import {i18n} from "../../lib/i18n";
3
- import createBootstrap from "bootstrap-vue-next";
4
-
5
- // @ts-expect-error type
6
- config.global.plugins = [i18n,createBootstrap()];
7
- // @ts-expect-error type
8
- Object.defineProperty(document, 'fonts', {
9
- value: { ready: Promise.resolve({}) },
10
- })
11
- global.HTMLCanvasElement.prototype.getContext = () => null;
12
- global.HTMLCanvasElement.prototype.toDataURL = () => null;
13
- global.URL.createObjectURL = () => "";
@@ -1,61 +0,0 @@
1
- import { injectAsset, injectAssets } from '@/utils/assets'
2
-
3
- describe('assets.js', () => {
4
-
5
- it('should define a script form Pym with a specify id', () => {
6
- expect(window.pym).toBeUndefined()
7
- injectAsset("https://pym.nprapps.org/pym.v1.min.js", "pym-js")
8
- expect(document.querySelectorAll('#pym-js').length).toBe(1)
9
- })
10
-
11
- it('should define a script form Pym with a specify id only once', () => {
12
- expect(window.pym).toBeUndefined()
13
- injectAsset("https://pym.nprapps.org/pym.v1.min.js", "pym-js")
14
- injectAsset("https://pym.nprapps.org/pym.v1.min.js", "pym-js")
15
- expect(document.querySelectorAll('#pym-js').length).toBe(1)
16
- })
17
-
18
- it('should define a script form Pym once', () => {
19
- expect(window.pym).toBeUndefined()
20
- injectAsset("https://pym.nprapps.org/pym.v1.min.js")
21
- expect(document.querySelectorAll('script[src="https://pym.nprapps.org/pym.v1.min.js"]').length).toBe(1)
22
- injectAsset("https://pym.nprapps.org/pym.v1.min.js")
23
- expect(document.querySelectorAll('script[src="https://pym.nprapps.org/pym.v1.min.js"]').length).toBe(1)
24
- })
25
-
26
- it('should define a script form Pym once, even if we pass an array with duplicates', () => {
27
- injectAssets([
28
- "https://pym.nprapps.org/pym.v1.min.js",
29
- "https://pym.nprapps.org/pym.v1.min.js"
30
- ])
31
- expect(document.querySelectorAll('script[src="https://pym.nprapps.org/pym.v1.min.js"]').length).toBe(1)
32
- })
33
-
34
- it('should define two scripts', () => {
35
- injectAssets([
36
- "https://pym.nprapps.org/pym.v1.min.js",
37
- "https://pym.nprapps.org/pym.v1.js"
38
- ])
39
-
40
- expect(document.querySelectorAll('script[src^="https://pym.nprapps.org/pym.v1"]').length).toBe(2)
41
- })
42
-
43
- it('should define two stylesheets', () => {
44
- injectAssets([
45
- "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css",
46
- "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.css"
47
- ])
48
-
49
- expect(document.querySelectorAll('link[rel=stylesheet]').length).toBe(2)
50
- })
51
-
52
- it('should define two stylesheets, even with duplicates', () => {
53
- injectAssets([
54
- "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css",
55
- "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.css",
56
- "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.css"
57
- ])
58
-
59
- expect(document.querySelectorAll('link[rel=stylesheet]').length).toBe(2)
60
- })
61
- })
@@ -1,18 +0,0 @@
1
- import noop from 'lodash/noop'
2
- import { copyText } from '@/utils/clipboard'
3
-
4
- describe('clipboard.js', () => {
5
-
6
- it('should return a Promise', () => {
7
- const promise = copyText('uwu').catch(noop)
8
- expect(promise).toBeInstanceOf(Promise)
9
- })
10
-
11
- it('should reject the promise', async () => {
12
- try {
13
- await copyText('uwu')
14
- } catch(error) {
15
- expect(error.text).toBe('uwu')
16
- }
17
- })
18
- })
@@ -1,71 +0,0 @@
1
- import startsWith from 'lodash/startsWith'
2
- import IframeResizer from '@/utils/iframe-resizer'
3
-
4
- describe('iframe-resizer.ts', () => {
5
-
6
- it('should define a `create` static method', () => {
7
- expect(IframeResizer.create).toBeDefined()
8
- })
9
-
10
- it('should create an IframeResizer instance from a singleton', () => {
11
- const first = IframeResizer.create()
12
- const second = IframeResizer.create()
13
- expect(first).toEqual(second)
14
- })
15
-
16
- it('should return a promise from the `sendHeight` method', () => {
17
- const resizer = IframeResizer.create()
18
- expect(resizer.sendHeight()).toBeInstanceOf(Promise)
19
- })
20
-
21
- it('should define a `template` static method', () => {
22
- expect(IframeResizer.template).toBeDefined()
23
- })
24
-
25
- it('should return a script tag as template', () => {
26
- expect(startsWith(IframeResizer.template(), '<script ')).toBeTruthy()
27
- })
28
-
29
- it('should return a script tag as template with a custom id', () => {
30
- const template = IframeResizer.template(window.location.href, 'uwu')
31
- expect(startsWith(template, '<script ')).toBeTruthy()
32
- expect(template.includes('id="uwu"')).toBeTruthy()
33
- })
34
-
35
- it('should define a `deletePymParams` static method', () => {
36
- expect(IframeResizer.deletePymParams).toBeDefined()
37
- })
38
-
39
- it('should delete Pym\'s params from the given location', () => {
40
- const url = 'https://projects.icij.org/?initialWidth=720&childId=example-graphic'
41
- expect(IframeResizer.deletePymParams(url)).toBe('https://projects.icij.org/')
42
- })
43
-
44
- it('should delete Pym\'s params from the other given location', () => {
45
- const url = 'https://projects.icij.org/test/?initialWidth=720'
46
- expect(IframeResizer.deletePymParams(url)).toBe('https://projects.icij.org/test/')
47
- })
48
-
49
- it('shouldn\'t delete Pym\'s params from given location because there is none', () => {
50
- const url = 'https://projects.icij.org/test/?initial=720'
51
- expect(IframeResizer.deletePymParams(url)).toBe(url)
52
- })
53
-
54
- it('should define a `isEmbedded` static method', () => {
55
- expect(IframeResizer.isEmbedded).toBeDefined()
56
- })
57
-
58
- it('should say the current location is not embedded', () => {
59
- expect(IframeResizer.isEmbedded()).toBeFalsy()
60
- })
61
-
62
- it('should say the given location is not embedded', () => {
63
- const url = 'https://projects.icij.org/'
64
- expect(IframeResizer.isEmbedded(url)).toBeFalsy()
65
- })
66
-
67
- it('should say the given location is embedded', () => {
68
- const url = 'https://projects.icij.org/?initialWidth=720&childId=example-graphic'
69
- expect(IframeResizer.isEmbedded(url)).toBeFalsy()
70
- })
71
- })