@allurereport/web-awesome 3.0.0-beta.10 → 3.0.0-beta.12

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 (167) hide show
  1. package/dist/multi/173.app-52d1decd.js +1 -0
  2. package/dist/multi/174.app-52d1decd.js +1 -0
  3. package/dist/multi/252.app-52d1decd.js +1 -0
  4. package/dist/multi/282.app-52d1decd.js +1 -0
  5. package/dist/multi/29.app-52d1decd.js +1 -0
  6. package/dist/multi/416.app-52d1decd.js +1 -0
  7. package/dist/multi/527.app-52d1decd.js +1 -0
  8. package/dist/multi/600.app-52d1decd.js +1 -0
  9. package/dist/multi/605.app-52d1decd.js +1 -0
  10. package/dist/multi/638.app-52d1decd.js +1 -0
  11. package/dist/multi/672.app-52d1decd.js +1 -0
  12. package/dist/multi/686.app-52d1decd.js +1 -0
  13. package/dist/multi/725.app-52d1decd.js +1 -0
  14. package/dist/multi/741.app-52d1decd.js +1 -0
  15. package/dist/multi/755.app-52d1decd.js +1 -0
  16. package/dist/multi/894.app-52d1decd.js +1 -0
  17. package/dist/multi/943.app-52d1decd.js +1 -0
  18. package/dist/multi/980.app-52d1decd.js +1 -0
  19. package/dist/multi/app-52d1decd.js +2 -0
  20. package/dist/multi/{app-d01d0c66.js.LICENSE.txt → app-52d1decd.js.LICENSE.txt} +7 -0
  21. package/dist/multi/manifest.json +20 -20
  22. package/dist/multi/styles-52d1decd.css +41 -0
  23. package/dist/single/app-83b0c4fc.js +2 -0
  24. package/dist/single/{app-6596cb08.js.LICENSE.txt → app-83b0c4fc.js.LICENSE.txt} +7 -0
  25. package/dist/single/manifest.json +1 -1
  26. package/package.json +4 -4
  27. package/src/assets/scss/palette.scss +391 -391
  28. package/src/assets/scss/theme.scss +9 -1
  29. package/src/assets/scss/vars.scss +0 -1
  30. package/src/components/BaseLayout/styles.scss +10 -2
  31. package/src/components/EnvironmentPicker/index.tsx +51 -0
  32. package/src/components/EnvironmentPicker/styles.scss +9 -0
  33. package/src/components/Footer/FooterLogo.tsx +1 -2
  34. package/src/components/Header/index.tsx +4 -10
  35. package/src/components/HeaderControls/index.tsx +20 -0
  36. package/src/components/MainReport/styles.scss +2 -1
  37. package/src/components/Metadata/index.tsx +6 -4
  38. package/src/components/MetadataButton/index.tsx +12 -4
  39. package/src/components/MetadataButton/styles.scss +3 -0
  40. package/src/components/ReportBody/index.tsx +3 -2
  41. package/src/components/ReportHeader/ReportHeaderLogo.tsx +6 -2
  42. package/src/components/ReportHeader/ReportHeaderPie.tsx +1 -2
  43. package/src/components/ReportMetadata/MetadataSummary.tsx +56 -63
  44. package/src/components/ReportMetadata/MetadataWithIcon.tsx +1 -1
  45. package/src/components/ReportMetadata/index.tsx +50 -3
  46. package/src/components/SideBySide/styles.scss +2 -3
  47. package/src/components/SplitLayout/index.tsx +2 -2
  48. package/src/components/SplitLayout/styles.scss +2 -1
  49. package/src/components/TestResult/TestStepsEmpty/index.tsx +2 -2
  50. package/src/components/TestResult/{TestResultAttachmentsView → TrAttachmentsView}/index.tsx +4 -4
  51. package/src/components/TestResult/{TestResultDescription → TrDescription}/index.tsx +2 -2
  52. package/src/components/TestResult/{TestResultDropdown → TrDropdown}/index.tsx +1 -1
  53. package/src/components/TestResult/{TestResultEmpty → TrEmpty}/index.tsx +6 -6
  54. package/src/components/TestResult/TrEnvironmentItem/index.tsx +82 -0
  55. package/src/components/TestResult/TrEnvironmentItem/styles.scss +60 -0
  56. package/src/components/TestResult/TrEnvironmentsView/index.tsx +64 -0
  57. package/src/components/TestResult/TrEnvironmentsView/styles.scss +11 -0
  58. package/src/components/TestResult/TrError/TrDiff.tsx +3 -5
  59. package/src/components/TestResult/TrError/index.tsx +21 -6
  60. package/src/components/TestResult/TrError/styles.scss +92 -2
  61. package/src/components/TestResult/{TestResultHeader/TestResultBreadcrumbs.tsx → TrHeader/TrBreadcrumbs.tsx} +3 -3
  62. package/src/components/TestResult/TrHeader/index.tsx +15 -0
  63. package/src/components/TestResult/{TestResultHistory/TestResultHistoryItem.tsx → TrHistory/TrHistoryItem.tsx} +3 -3
  64. package/src/components/TestResult/{TestResultHistory → TrHistory}/index.tsx +5 -5
  65. package/src/components/TestResult/{TestResultInfo/TestResultInfoStatuses.tsx → TrInfo/TrInfoStatuses.tsx} +1 -1
  66. package/src/components/TestResult/{TestResultInfo → TrInfo}/index.tsx +37 -23
  67. package/src/components/TestResult/{TestResultLinks → TrLinks}/index.tsx +6 -6
  68. package/src/components/TestResult/{TestResultMetadata → TrMetadata}/index.tsx +4 -4
  69. package/src/components/TestResult/{TestResultNavigation → TrNavigation}/index.tsx +3 -2
  70. package/src/components/TestResult/TrOverview.tsx +47 -0
  71. package/src/components/TestResult/{TestResultParameters → TrParameters}/index.tsx +2 -2
  72. package/src/components/TestResult/{TestResultPrevStatuses → TrPrevStatuses}/index.tsx +6 -6
  73. package/src/components/TestResult/TrPwTraces/PwTrace.tsx +34 -0
  74. package/src/components/TestResult/TrPwTraces/PwTraceButton.tsx +33 -0
  75. package/src/components/TestResult/TrPwTraces/index.tsx +29 -0
  76. package/src/components/TestResult/TrPwTraces/styles.scss +20 -0
  77. package/src/components/TestResult/{TestResultRetriesView/TestResultRetriesItem.tsx → TrRetriesView/TrRetriesItem.tsx} +3 -3
  78. package/src/components/TestResult/{TestResultRetriesView → TrRetriesView}/index.tsx +4 -6
  79. package/src/components/TestResult/{TestResultSetup → TrSetup}/index.tsx +11 -11
  80. package/src/components/TestResult/{TestResultSeverity → TrSeverity}/index.tsx +1 -1
  81. package/src/components/TestResult/{TestResultStatus → TrStatus}/index.tsx +3 -2
  82. package/src/components/TestResult/{TestResultSteps/testResultAttachment.tsx → TrSteps/TrAttachment.tsx} +10 -7
  83. package/src/components/TestResult/{TestResultSteps/testResultAttachmentInfo.tsx → TrSteps/TrAttachmentInfo.tsx} +8 -8
  84. package/src/components/TestResult/{TestResultSteps/testResultStep.tsx → TrSteps/TrStep.tsx} +25 -14
  85. package/src/components/TestResult/{TestResultSteps/testResultStepInfo.tsx → TrSteps/TrStepInfo.tsx} +2 -2
  86. package/src/components/TestResult/{TestResultSteps → TrSteps}/index.tsx +8 -8
  87. package/src/components/TestResult/{TestResultSteps → TrSteps}/styles.scss +2 -1
  88. package/src/components/TestResult/{TestResultSteps → TrSteps}/wrongAttachment.tsx +1 -1
  89. package/src/components/TestResult/{TestResultTabs → TrTabs}/index.tsx +6 -6
  90. package/src/components/TestResult/{TestResultTeardown → TrTeardown}/index.tsx +11 -11
  91. package/src/components/TestResult/index.tsx +42 -30
  92. package/src/components/TestResult/styles.scss +2 -1
  93. package/src/components/Tree/index.tsx +99 -16
  94. package/src/components/Tree/styles.scss +16 -1
  95. package/src/index.tsx +36 -33
  96. package/src/{i18n/locales → locales}/az.json +14 -4
  97. package/src/{i18n/locales → locales}/de.json +13 -4
  98. package/src/{i18n/locales → locales}/en.json +15 -6
  99. package/src/{i18n/locales → locales}/es.json +13 -4
  100. package/src/{i18n/locales → locales}/fr.json +13 -4
  101. package/src/{i18n/locales → locales}/he.json +13 -4
  102. package/src/{i18n/locales/am.json → locales/hy.json} +13 -4
  103. package/src/{i18n/locales → locales}/it.json +13 -4
  104. package/src/{i18n/locales → locales}/ja.json +13 -4
  105. package/src/{i18n/locales → locales}/ka.json +16 -7
  106. package/src/{i18n/locales → locales}/kr.json +15 -6
  107. package/src/{i18n/locales → locales}/nl.json +13 -4
  108. package/src/{i18n/locales → locales}/pl.json +14 -5
  109. package/src/{i18n/locales → locales}/pt.json +12 -4
  110. package/src/{i18n/locales → locales}/ru.json +14 -5
  111. package/src/{i18n/locales → locales}/sv.json +13 -4
  112. package/src/{i18n/locales → locales}/tr.json +13 -4
  113. package/src/{i18n/locales → locales}/zh.json +13 -4
  114. package/src/stores/chart.ts +3 -3
  115. package/src/stores/env.ts +88 -0
  116. package/src/stores/locale.ts +4 -4
  117. package/src/stores/stats.ts +52 -7
  118. package/src/stores/testResults.ts +6 -6
  119. package/src/stores/tree.ts +48 -17
  120. package/src/stores/variables.ts +38 -0
  121. package/types.d.ts +2 -1
  122. package/dist/multi/141.app-d01d0c66.js +0 -1
  123. package/dist/multi/222.app-d01d0c66.js +0 -1
  124. package/dist/multi/335.app-d01d0c66.js +0 -1
  125. package/dist/multi/34.app-d01d0c66.js +0 -1
  126. package/dist/multi/349.app-d01d0c66.js +0 -1
  127. package/dist/multi/378.app-d01d0c66.js +0 -1
  128. package/dist/multi/406.app-d01d0c66.js +0 -1
  129. package/dist/multi/476.app-d01d0c66.js +0 -1
  130. package/dist/multi/53.app-d01d0c66.js +0 -1
  131. package/dist/multi/584.app-d01d0c66.js +0 -1
  132. package/dist/multi/690.app-d01d0c66.js +0 -1
  133. package/dist/multi/747.app-d01d0c66.js +0 -1
  134. package/dist/multi/767.app-d01d0c66.js +0 -1
  135. package/dist/multi/816.app-d01d0c66.js +0 -1
  136. package/dist/multi/83.app-d01d0c66.js +0 -1
  137. package/dist/multi/873.app-d01d0c66.js +0 -1
  138. package/dist/multi/920.app-d01d0c66.js +0 -1
  139. package/dist/multi/991.app-d01d0c66.js +0 -1
  140. package/dist/multi/app-d01d0c66.js +0 -2
  141. package/dist/multi/styles-d01d0c66.css +0 -39
  142. package/dist/single/app-6596cb08.js +0 -2
  143. package/src/components/LanguagePicker/index.tsx +0 -40
  144. package/src/components/ReportLogo/index.tsx +0 -16
  145. package/src/components/ReportLogo/styles.scss +0 -20
  146. package/src/components/ReportLogoFull/index.tsx +0 -20
  147. package/src/components/ReportLogoFull/styles.scss +0 -7
  148. package/src/components/TestResult/TestResultHeader/index.tsx +0 -21
  149. package/src/components/TestResult/TestResultOverview.tsx +0 -43
  150. package/src/components/ThemeButton/ThemeButton.tsx +0 -20
  151. package/src/i18n/constants.ts +0 -124
  152. /package/src/components/TestResult/{TestResultAttachmentsView → TrAttachmentsView}/styles.scss +0 -0
  153. /package/src/components/TestResult/{TestResultDescription → TrDescription}/styles.scss +0 -0
  154. /package/src/components/TestResult/{TestResultDropdown → TrDropdown}/styles.scss +0 -0
  155. /package/src/components/TestResult/{TestResultEmpty → TrEmpty}/styles.scss +0 -0
  156. /package/src/components/TestResult/{TestResultHeader → TrHeader}/styles.scss +0 -0
  157. /package/src/components/TestResult/{TestResultHistory → TrHistory}/styles.scss +0 -0
  158. /package/src/components/TestResult/{TestResultInfo → TrInfo}/styles.scss +0 -0
  159. /package/src/components/TestResult/{TestResultLinks → TrLinks}/styles.scss +0 -0
  160. /package/src/components/TestResult/{TestResultMetadata → TrMetadata}/styles.scss +0 -0
  161. /package/src/components/TestResult/{TestResultNavigation → TrNavigation}/styles.scss +0 -0
  162. /package/src/components/TestResult/{TestResultParameters → TrParameters}/styles.scss +0 -0
  163. /package/src/components/TestResult/{TestResultPrevStatuses → TrPrevStatuses}/styles.scss +0 -0
  164. /package/src/components/TestResult/{TestResultRetriesView → TrRetriesView}/styles.scss +0 -0
  165. /package/src/components/TestResult/{TestResultSeverity → TrSeverity}/styles.scss +0 -0
  166. /package/src/components/TestResult/{TestResultStatus → TrStatus}/styles.scss +0 -0
  167. /package/src/components/TestResult/{TestResultTabs → TrTabs}/styles.scss +0 -0
@@ -8,9 +8,9 @@
8
8
  "total": "wszystkie"
9
9
  },
10
10
  "testSummary": {
11
- "all": "Wszystkie testy",
12
- "flaky": "Flaky testy",
13
- "retry": "Powtórne testy",
11
+ "total": "Wszystkie",
12
+ "flaky": "Niestabilne testy",
13
+ "retries": "Powtórne testy",
14
14
  "new": "Nowe testy"
15
15
  },
16
16
  "tabs": {
@@ -64,7 +64,8 @@
64
64
  "no-history-results": "Brak dostępnych informacji o historii",
65
65
  "no-retries-results": "Brak dostępnych informacji o ponownych próbach",
66
66
  "no-test-steps-results": "Brak dostępnych informacji o krokach testowych",
67
- "no-test-case-results": "Brak wyników przypadków testowych"
67
+ "no-test-case-results": "Brak wyników przypadków testowych",
68
+ "no-environments-results": "Brak dostępnych informacji o środowiskach"
68
69
  },
69
70
  "severity": {
70
71
  "name": "Ważność",
@@ -80,6 +81,11 @@
80
81
  "setup": "Przygotowanie",
81
82
  "teardown": "Zakończenie"
82
83
  },
84
+ "environments": {
85
+ "environment_one": "Środowisko",
86
+ "environment_other": "Środowiska",
87
+ "all": "Wszystkie"
88
+ },
83
89
  "ui": {
84
90
  "labels": "Labelki",
85
91
  "metadata": "Metadane",
@@ -90,12 +96,15 @@
90
96
  "history": "Historia",
91
97
  "attachments": "Załączniki",
92
98
  "retries": "Próby ponowne",
99
+ "environments": "Środowiska",
93
100
  "error": "Błąd",
94
101
  "goToStep": "Idź do kroku",
95
102
  "showLess": "Pokaż mniej",
96
103
  "showMore": "Pokaż więcej",
97
104
  "copy": "Skopuj",
98
- "at": "w"
105
+ "at": "w",
106
+ "variables": "Zmienne",
107
+ "openPwTrace": "Otwórz Playwright Trace"
99
108
  },
100
109
  "controls": {
101
110
  "newTabAttachment": "Otwórz w nowej zakładce",
@@ -11,9 +11,9 @@
11
11
  "retryTests": "repetir"
12
12
  },
13
13
  "testSummary": {
14
- "all": "Todos os testes",
14
+ "total": "Total",
15
15
  "flaky": "Testes instáveis",
16
- "retry": "Testes repetidos",
16
+ "retries": "Testes repetidos",
17
17
  "new": "Testes novos"
18
18
  },
19
19
  "tabs": {
@@ -67,7 +67,8 @@
67
67
  "no-history-results": "Nenhuma informação de histórico disponível",
68
68
  "no-retries-results": "Nenhuma informação de repetições disponível",
69
69
  "no-test-steps-results": "Nenhuma informação disponível sobre as etapas do teste",
70
- "no-test-case-results": "Nenhum resultado de caso de teste"
70
+ "no-test-case-results": "Nenhum resultado de caso de teste",
71
+ "no-environments-results": "Nenhuma informação de ambiente disponível"
71
72
  },
72
73
  "severity": {
73
74
  "blocker": "bloqueador",
@@ -82,6 +83,11 @@
82
83
  "setup": "Configuração",
83
84
  "teardown": "Desmontagem"
84
85
  },
86
+ "environments": {
87
+ "environment_one": "Ambiente",
88
+ "environment_other": "Ambientes",
89
+ "all": "Todos"
90
+ },
85
91
  "ui": {
86
92
  "labels": "Etiquetas",
87
93
  "metadata": "Metadados",
@@ -92,12 +98,14 @@
92
98
  "history": "Histórico",
93
99
  "attachments": "Anexos",
94
100
  "retries": "Repetições",
101
+ "environments": "Ambientes",
95
102
  "error": "Erro",
96
103
  "goToStep": "Ir para o passo",
97
104
  "showLess": "Mostrar menos",
98
105
  "showMore": "Mostrar mais",
99
106
  "copy": "Copiar",
100
- "at": "em"
107
+ "at": "em",
108
+ "openPwTrace": "Abrir Playwright Trace"
101
109
  },
102
110
  "controls": {
103
111
  "newTabAttachment": "Abrir anexo em nova aba",
@@ -8,9 +8,9 @@
8
8
  "total": "все"
9
9
  },
10
10
  "testSummary": {
11
- "all": "Все тесты",
12
- "flaky": "Flaky тесты",
13
- "retry": "Повторные тесты",
11
+ "total": "Всего",
12
+ "flaky": "Нестабильные тесты",
13
+ "retries": "Повторные тесты",
14
14
  "new": "Новые тесты"
15
15
  },
16
16
  "tabs": {
@@ -64,7 +64,8 @@
64
64
  "no-history-results": "Информация об истории отсутствует",
65
65
  "no-retries-results": "Информация о перезапусках отсутствует",
66
66
  "no-test-steps-results": "Нет информации о шагах тестирования",
67
- "no-test-case-results": "Нет результатов тест-кейсов"
67
+ "no-test-case-results": "Нет результатов тест-кейсов",
68
+ "no-environments-results": "Информация об окружениях отсутствует"
68
69
  },
69
70
  "severity": {
70
71
  "name": "Важность",
@@ -80,6 +81,11 @@
80
81
  "setup": "Подготовка",
81
82
  "teardown": "Завершение"
82
83
  },
84
+ "environments": {
85
+ "environment_one": "Окружение",
86
+ "environment_other": "Окружения",
87
+ "all": "Все"
88
+ },
83
89
  "ui": {
84
90
  "labels": "Лейблы",
85
91
  "metadata": "Метаданные",
@@ -90,12 +96,15 @@
90
96
  "history": "История",
91
97
  "attachments": "Вложения",
92
98
  "retries": "Перезапуски",
99
+ "environments": "Окружения",
93
100
  "error": "Ошибка",
94
101
  "goToStep": "Перейти к шагу",
95
102
  "showLess": "Показать меньше",
96
103
  "showMore": "Показать больше",
97
104
  "copy": "Скопировать",
98
- "at": "в"
105
+ "at": "в",
106
+ "variables": "Переменные",
107
+ "openPwTrace": "Открыть Playwright Trace"
99
108
  },
100
109
  "controls": {
101
110
  "newTabAttachment": "Открыть в новой вкладке",
@@ -11,9 +11,9 @@
11
11
  "retryTests": "försök igen"
12
12
  },
13
13
  "testSummary": {
14
- "all": "Alla tester",
14
+ "total": "Totalt",
15
15
  "flaky": "Ostadiga tester",
16
- "retry": "Omtestade tester",
16
+ "retries": "Omtestade tester",
17
17
  "new": "Nya tester"
18
18
  },
19
19
  "tabs": {
@@ -67,7 +67,8 @@
67
67
  "no-history-results": "Ingen historik information tillgänglig",
68
68
  "no-retries-results": "Ingen omtagningar information tillgänglig",
69
69
  "no-test-steps-results": "Ingen information om teststeg tillgänglig",
70
- "no-test-case-results": "Inga testfallresultat"
70
+ "no-test-case-results": "Inga testfallresultat",
71
+ "no-environments-results": "Ingen miljöinformation tillgänglig"
71
72
  },
72
73
  "severity": {
73
74
  "blocker": "blockerare",
@@ -82,6 +83,11 @@
82
83
  "setup": "Förberedelse",
83
84
  "teardown": "Avslutning"
84
85
  },
86
+ "environments": {
87
+ "environment_one": "Miljö",
88
+ "environment_other": "Miljöer",
89
+ "all": "Alla"
90
+ },
85
91
  "ui": {
86
92
  "labels": "Etiketter",
87
93
  "metadata": "Metadata",
@@ -92,12 +98,15 @@
92
98
  "history": "Historik",
93
99
  "attachments": "Bilagor",
94
100
  "retries": "Omtagningar",
101
+ "environments": "Miljöer",
95
102
  "error": "Fel",
96
103
  "goToStep": "Gå till steg",
97
104
  "showLess": "Visa mindre",
98
105
  "showMore": "Visa mer",
99
106
  "copy": "Kopiera",
100
- "at": "vid"
107
+ "at": "vid",
108
+ "variables": "Variabler",
109
+ "openPwTrace": "Öppna Playwright Trace"
101
110
  },
102
111
  "controls": {
103
112
  "newTabAttachment": "Öppna bilaga i ny flik",
@@ -11,9 +11,9 @@
11
11
  "retryTests": "tekrar dene"
12
12
  },
13
13
  "testSummary": {
14
- "all": "Tüm Testler",
14
+ "total": "Toplam",
15
15
  "flaky": "İstikrarsız Testler",
16
- "retry": "Tekrarlanan Testler",
16
+ "retries": "Tekrarlanan Testler",
17
17
  "new": "Yeni Testler"
18
18
  },
19
19
  "tabs": {
@@ -67,7 +67,8 @@
67
67
  "no-history-results": "Geçmiş bilgisi mevcut değil",
68
68
  "no-retries-results": "Tekrar deneme bilgisi mevcut değil",
69
69
  "no-test-steps-results": "Test adımları hakkında bilgi mevcut değil",
70
- "no-test-case-results": "Test vakası sonuçları yok"
70
+ "no-test-case-results": "Test vakası sonuçları yok",
71
+ "no-environments-results": "Ortam bilgisi mevcut değil"
71
72
  },
72
73
  "severity": {
73
74
  "blocker": "engelleyici",
@@ -82,6 +83,11 @@
82
83
  "setup": "Kurulum",
83
84
  "teardown": "Kapatma"
84
85
  },
86
+ "environments": {
87
+ "environment_one": "Ortam",
88
+ "environment_other": "Ortamlar",
89
+ "all": "Tümü"
90
+ },
85
91
  "ui": {
86
92
  "labels": "Etiketler",
87
93
  "metadata": "Meta Veriler",
@@ -92,12 +98,15 @@
92
98
  "history": "Geçmiş",
93
99
  "attachments": "Ekler",
94
100
  "retries": "Tekrar Denemeler",
101
+ "environments": "Ortam",
95
102
  "error": "Hata",
96
103
  "goToStep": "Adıma git",
97
104
  "showLess": "Daha az göster",
98
105
  "showMore": "Daha fazla göster",
99
106
  "copy": "Kopyala",
100
- "at": "tarihinde"
107
+ "at": "tarihinde",
108
+ "variables": "Değişkenler",
109
+ "openPwTrace": "Playwright Trace'i aç"
101
110
  },
102
111
  "controls": {
103
112
  "newTabAttachment": "Eki yeni sekmede aç",
@@ -11,9 +11,9 @@
11
11
  "retryTests": "重试"
12
12
  },
13
13
  "testSummary": {
14
- "all": "所有测试",
14
+ "total": "总计",
15
15
  "flaky": "不稳定的测试",
16
- "retry": "重试的测试",
16
+ "retries": "重试的测试",
17
17
  "new": "新的测试"
18
18
  },
19
19
  "tabs": {
@@ -67,7 +67,8 @@
67
67
  "no-history-results": "没有历史信息",
68
68
  "no-retries-results": "没有重试信息",
69
69
  "no-test-steps-results": "没有可用的测试步骤信息",
70
- "no-test-case-results": "没有测试用例结果"
70
+ "no-test-case-results": "没有测试用例结果",
71
+ "no-environments-results": "没有环境信息"
71
72
  },
72
73
  "severity": {
73
74
  "blocker": "阻断",
@@ -82,6 +83,11 @@
82
83
  "setup": "设置",
83
84
  "teardown": "拆解"
84
85
  },
86
+ "environments": {
87
+ "environment_one": "环境",
88
+ "environment_other": "环境",
89
+ "all": "所有"
90
+ },
85
91
  "ui": {
86
92
  "labels": "标签",
87
93
  "metadata": "元数据",
@@ -92,12 +98,15 @@
92
98
  "history": "历史",
93
99
  "attachments": "附件",
94
100
  "retries": "重试",
101
+ "environments": "环境",
95
102
  "error": "错误",
96
103
  "goToStep": "跳转到步骤",
97
104
  "showLess": "显示更少",
98
105
  "showMore": "显示更多",
99
106
  "copy": "复制",
100
- "at": "在"
107
+ "at": "在",
108
+ "variables": "变量",
109
+ "openPwTrace": "打开 Playwright Trace"
101
110
  },
102
111
  "controls": {
103
112
  "newTabAttachment": "在新标签页中打开附件",
@@ -1,6 +1,6 @@
1
1
  import { fetchReportJsonData } from "@allurereport/web-commons";
2
2
  import { signal } from "@preact/signals";
3
- import { StoreSignalState } from "@/stores/types";
3
+ import type { StoreSignalState } from "@/stores/types";
4
4
 
5
5
  export const pieChartStore = signal<StoreSignalState<any>>({
6
6
  loading: true,
@@ -8,7 +8,7 @@ export const pieChartStore = signal<StoreSignalState<any>>({
8
8
  data: undefined,
9
9
  });
10
10
 
11
- export const fetchPieChartData = async () => {
11
+ export const fetchPieChartData = async (env: string) => {
12
12
  pieChartStore.value = {
13
13
  ...pieChartStore.value,
14
14
  loading: true,
@@ -16,7 +16,7 @@ export const fetchPieChartData = async () => {
16
16
  };
17
17
 
18
18
  try {
19
- const res = await fetchReportJsonData("widgets/allure_pie_chart.json");
19
+ const res = await fetchReportJsonData(env ? `widgets/${env}/pie_chart.json` : "widgets/pie_chart.json");
20
20
 
21
21
  pieChartStore.value = {
22
22
  data: res,
@@ -0,0 +1,88 @@
1
+ import { type TestEnvGroup } from "@allurereport/core-api";
2
+ import { fetchReportJsonData } from "@allurereport/web-commons";
3
+ import { effect, signal } from "@preact/signals";
4
+ import type { StoreSignalState } from "@/stores/types";
5
+ import { loadFromLocalStorage } from "@/utils/loadFromLocalStorage";
6
+
7
+ export const environmentsStore = signal<StoreSignalState<string[]>>({
8
+ loading: false,
9
+ error: undefined,
10
+ data: [],
11
+ });
12
+
13
+ export const testEnvGroupsStore = signal<StoreSignalState<Record<string, TestEnvGroup>>>({
14
+ loading: false,
15
+ error: undefined,
16
+ data: {},
17
+ });
18
+
19
+ export const collapsedEnvironments = signal<string[]>(loadFromLocalStorage<string[]>("collapsedEnvironments", []));
20
+
21
+ export const currentEnvironment = signal<string>(loadFromLocalStorage<string>("currentEnvironment", ""));
22
+
23
+ export const setCurrentEnvironment = (env: string) => {
24
+ currentEnvironment.value = env;
25
+ };
26
+
27
+ export const fetchEnvironments = async () => {
28
+ environmentsStore.value = {
29
+ ...environmentsStore.value,
30
+ loading: true,
31
+ error: undefined,
32
+ };
33
+
34
+ try {
35
+ const res = await fetchReportJsonData<string[]>("widgets/environments.json");
36
+
37
+ environmentsStore.value = {
38
+ data: res,
39
+ error: undefined,
40
+ loading: false,
41
+ };
42
+ } catch (e) {
43
+ environmentsStore.value = {
44
+ ...environmentsStore.value,
45
+ error: e.message,
46
+ loading: false,
47
+ };
48
+ }
49
+ };
50
+
51
+ export const fetchTestEnvGroup = async (id: string) => {
52
+ if (testEnvGroupsStore.value.data[id]) {
53
+ return;
54
+ }
55
+
56
+ testEnvGroupsStore.value = {
57
+ ...testEnvGroupsStore.value,
58
+ loading: true,
59
+ error: undefined,
60
+ };
61
+
62
+ try {
63
+ const res = await fetchReportJsonData<TestEnvGroup | undefined>(`data/test-env-groups/${id}.json`);
64
+
65
+ testEnvGroupsStore.value = {
66
+ data: {
67
+ ...testEnvGroupsStore.value.data,
68
+ [id]: res,
69
+ },
70
+ error: undefined,
71
+ loading: false,
72
+ };
73
+ } catch (e) {
74
+ testEnvGroupsStore.value = {
75
+ ...testEnvGroupsStore.value,
76
+ error: e.message,
77
+ loading: false,
78
+ };
79
+ }
80
+ };
81
+
82
+ effect(() => {
83
+ localStorage.setItem("currentEnvironment", JSON.stringify(currentEnvironment.value));
84
+ });
85
+
86
+ effect(() => {
87
+ localStorage.setItem("collapsedEnvironments", JSON.stringify([...collapsedEnvironments.value]));
88
+ });
@@ -1,8 +1,7 @@
1
- import { getReportOptions } from "@allurereport/web-commons";
1
+ import { DEFAULT_LOCALE, LANG_LOCALE, type LangLocale, getReportOptions } from "@allurereport/web-commons";
2
2
  import { computed, signal } from "@preact/signals";
3
3
  import i18next, { type TOptions } from "i18next";
4
4
  import type { AwesomeReportOptions } from "types";
5
- import { DEFAULT_LOCALE, LANG_LOCALE, type LangLocale } from "@/i18n/constants";
6
5
 
7
6
  const namespaces = [
8
7
  "empty",
@@ -22,10 +21,11 @@ const namespaces = [
22
21
  "errors",
23
22
  "split",
24
23
  "modal",
24
+ "environments",
25
25
  ];
26
26
 
27
27
  export const currentLocale = signal<LangLocale>("en" as LangLocale);
28
- export const currentLocaleIso = computed(() => LANG_LOCALE[currentLocale.value].iso);
28
+ export const currentLocaleIso = computed(() => LANG_LOCALE[currentLocale.value]?.iso ?? LANG_LOCALE.en.iso);
29
29
  export const currentLocaleIsRTL = computed(() => ["ar", "he", "fa"].includes(currentLocale.value));
30
30
 
31
31
  export const getLocale = async () => {
@@ -43,7 +43,7 @@ export const waitForI18next = i18next
43
43
  namespace: string,
44
44
  callback: (errorValue: unknown, translations: null) => void,
45
45
  ) => {
46
- await import(`@/i18n/locales/${language}.json`)
46
+ await import(`@/locales/${language}.json`)
47
47
  .then((resources: Record<string, null>) => {
48
48
  callback(null, resources[namespace]);
49
49
  })
@@ -2,8 +2,9 @@ import type { Statistic } from "@allurereport/core-api";
2
2
  import { fetchReportJsonData } from "@allurereport/web-commons";
3
3
  import { signal } from "@preact/signals";
4
4
  import type { StoreSignalState } from "@/stores/types";
5
+ import type { AwesomeTree } from "../../types";
5
6
 
6
- export const statsStore = signal<StoreSignalState<Statistic>>({
7
+ export const reportStatsStore = signal<StoreSignalState<Statistic>>({
7
8
  loading: true,
8
9
  error: undefined,
9
10
  data: {
@@ -11,26 +12,70 @@ export const statsStore = signal<StoreSignalState<Statistic>>({
11
12
  },
12
13
  });
13
14
 
14
- export const fetchStats = async () => {
15
- statsStore.value = {
16
- ...statsStore.value,
15
+ export const statsByEnvStore = signal<StoreSignalState<Record<string, Statistic>>>({
16
+ loading: true,
17
+ error: undefined,
18
+ data: {},
19
+ });
20
+
21
+ export const fetchReportStats = async () => {
22
+ reportStatsStore.value = {
23
+ ...reportStatsStore.value,
17
24
  loading: true,
18
25
  error: undefined,
19
26
  };
20
27
 
21
28
  try {
22
- const res = await fetchReportJsonData<Statistic>("widgets/allure_statistic.json");
29
+ const res = await fetchReportJsonData<Statistic>("widgets/statistic.json");
23
30
 
24
- statsStore.value = {
31
+ reportStatsStore.value = {
25
32
  data: res,
26
33
  error: undefined,
27
34
  loading: false,
28
35
  };
29
36
  } catch (err) {
30
- statsStore.value = {
37
+ reportStatsStore.value = {
31
38
  data: { total: 0 },
32
39
  error: err.message,
33
40
  loading: false,
34
41
  };
35
42
  }
36
43
  };
44
+
45
+ export const fetchEnvStats = async (envs: string[]) => {
46
+ const envsToFetch = envs.filter((env) => !statsByEnvStore.value.data?.[env]);
47
+
48
+ // all envs have already been fetched
49
+ if (envsToFetch.length === 0) {
50
+ return;
51
+ }
52
+
53
+ statsByEnvStore.value = {
54
+ ...statsByEnvStore.value,
55
+ loading: true,
56
+ error: undefined,
57
+ };
58
+
59
+ try {
60
+ const data = await Promise.all(
61
+ envsToFetch.map((env) => fetchReportJsonData<AwesomeTree>(`widgets/${env}/statistic.json`)),
62
+ );
63
+
64
+ statsByEnvStore.value = {
65
+ data: envs.reduce((acc, env, index) => {
66
+ return {
67
+ ...acc,
68
+ [env]: data[index],
69
+ };
70
+ }, {}),
71
+ loading: false,
72
+ error: undefined,
73
+ };
74
+ } catch (err) {
75
+ statsByEnvStore.value = {
76
+ ...statsByEnvStore.value,
77
+ error: err.message,
78
+ loading: false,
79
+ };
80
+ }
81
+ };
@@ -3,25 +3,25 @@ import { signal } from "@preact/signals";
3
3
  import { type AwesomeTestResult } from "../../types";
4
4
  import { type StoreSignalState } from "./types";
5
5
 
6
- export type TestResultsStoreState = Record<string, AwesomeTestResult>;
6
+ export type TrStoreState = Record<string, AwesomeTestResult>;
7
7
 
8
- export type TestResultNavStoreState = string[];
8
+ export type TrNavStoreState = string[];
9
9
 
10
- export const testResultStore = signal<StoreSignalState<TestResultsStoreState>>({
10
+ export const testResultStore = signal<StoreSignalState<TrStoreState>>({
11
11
  loading: true,
12
12
  error: undefined,
13
13
  data: undefined,
14
14
  });
15
15
 
16
- export const testResultNavStore = signal<StoreSignalState<TestResultNavStoreState>>({
16
+ export const testResultNavStore = signal<StoreSignalState<TrNavStoreState>>({
17
17
  loading: true,
18
18
  error: undefined,
19
19
  data: undefined,
20
20
  });
21
21
 
22
- export const fetchTestResultNav = async () => {
22
+ export const fetchTestResultNav = async (env?: string) => {
23
23
  try {
24
- const data = await fetchReportJsonData<string[]>("widgets/nav.json");
24
+ const data = await fetchReportJsonData<string[]>(env ? `widgets/${env}/nav.json` : "widgets/nav.json");
25
25
 
26
26
  testResultNavStore.value = {
27
27
  data,
@@ -1,4 +1,5 @@
1
1
  import { fetchReportJsonData } from "@allurereport/web-commons";
2
+ import type { RecursiveTree } from "@allurereport/web-components/global";
2
3
  import { computed, effect, signal } from "@preact/signals";
3
4
  import type { AwesomeStatus, AwesomeTree, AwesomeTreeGroup } from "types";
4
5
  import type { StoreSignalState } from "@/stores/types";
@@ -16,16 +17,19 @@ export type TreeFiltersState = {
16
17
  direction: TreeDirection;
17
18
  };
18
19
 
19
- export const treeStore = signal<StoreSignalState<AwesomeTree>>({
20
+ export const treeStore = signal<StoreSignalState<Record<string, AwesomeTree>>>({
20
21
  loading: true,
21
22
  error: undefined,
22
23
  data: undefined,
23
24
  });
24
25
 
25
- export const noTests = computed(() => !Object.keys(treeStore?.value?.data?.leavesById).length);
26
+ export const noTests = computed(() => {
27
+ return Object.values(treeStore?.value?.data ?? {}).every(
28
+ ({ leavesById }) => !leavesById || !Object.keys(leavesById).length,
29
+ );
30
+ });
26
31
 
27
- const loadedFromLS = loadFromLocalStorage<string[]>("collapsedTrees", []);
28
- export const collapsedTrees = signal(new Set(loadedFromLS as string[]));
32
+ export const collapsedTrees = signal(new Set(loadFromLocalStorage<string[]>("collapsedTrees", [])));
29
33
 
30
34
  effect(() => {
31
35
  localStorage.setItem("collapsedTrees", JSON.stringify([...collapsedTrees.value]));
@@ -66,18 +70,30 @@ effect(() => {
66
70
  });
67
71
 
68
72
  export const filteredTree = computed(() => {
69
- const { root, leavesById, groupsById } = treeStore.value.data;
70
-
71
- return createRecursiveTree({
72
- group: root as AwesomeTreeGroup,
73
- leavesById,
74
- groupsById,
75
- filterOptions: treeFiltersStore.value,
76
- });
73
+ return Object.entries(treeStore.value.data).reduce(
74
+ (acc, [key, value]) => {
75
+ if (!value) {
76
+ return acc;
77
+ }
78
+
79
+ const { root, leavesById, groupsById } = value;
80
+ const tree = createRecursiveTree({
81
+ group: root as AwesomeTreeGroup,
82
+ leavesById,
83
+ groupsById,
84
+ filterOptions: treeFiltersStore.value,
85
+ });
86
+
87
+ return Object.assign(acc, {
88
+ [key]: tree,
89
+ });
90
+ },
91
+ {} as Record<string, RecursiveTree>,
92
+ );
77
93
  });
78
94
 
79
95
  export const noTestsFound = computed(() => {
80
- return isRecursiveTreeEmpty(filteredTree.value);
96
+ return Object.values(filteredTree.value).every(isRecursiveTreeEmpty);
81
97
  });
82
98
 
83
99
  export const clearTreeFilters = () => {
@@ -132,7 +148,14 @@ export const setTreeFilter = (filterKey: TreeFilters, value: boolean) => {
132
148
  };
133
149
  };
134
150
 
135
- export const fetchTreeData = async () => {
151
+ export const fetchEnvTreesData = async (envs: string[]) => {
152
+ const envsToFetch = envs.filter((env) => !treeStore.value.data?.[env]);
153
+
154
+ // all envs have already been fetched
155
+ if (envsToFetch.length === 0) {
156
+ return;
157
+ }
158
+
136
159
  treeStore.value = {
137
160
  ...treeStore.value,
138
161
  loading: true,
@@ -140,12 +163,20 @@ export const fetchTreeData = async () => {
140
163
  };
141
164
 
142
165
  try {
143
- const res = await fetchReportJsonData<AwesomeTree>("widgets/tree.json");
166
+ const data = await Promise.all(
167
+ envsToFetch.map((env) => fetchReportJsonData<AwesomeTree>(`widgets/${env}/tree.json`)),
168
+ );
144
169
 
145
170
  treeStore.value = {
146
- data: res,
147
- error: undefined,
171
+ data: envs.reduce(
172
+ (acc, env, index) => ({
173
+ ...acc,
174
+ [env]: data[index],
175
+ }),
176
+ {},
177
+ ),
148
178
  loading: false,
179
+ error: undefined,
149
180
  };
150
181
  } catch (e) {
151
182
  treeStore.value = {