diff --git a/core/src/main/java/de/jplag/options/JPlagOptions.java b/core/src/main/java/de/jplag/options/JPlagOptions.java index 44eea1d2f..84d6af405 100644 --- a/core/src/main/java/de/jplag/options/JPlagOptions.java +++ b/core/src/main/java/de/jplag/options/JPlagOptions.java @@ -51,7 +51,7 @@ public record JPlagOptions(Language language, Integer minimumTokenMatch, Set submissionToIdFunction; private final Map> submissionIdToComparisonFileName = new ConcurrentHashMap<>(); private final Map fileNameCollisions = new ConcurrentHashMap<>(); - public ComparisonReportWriter(Function submissionToIdFunction, FileWriter fileWriter) { + public ComparisonReportWriter(Function submissionToIdFunction, JsonWriter fileWriter) { this.submissionToIdFunction = submissionToIdFunction; this.fileWriter = fileWriter; } @@ -59,7 +60,7 @@ private void writeComparisons(String path, List comparisons) { var comparisonReport = new ComparisonReport(firstSubmissionId, secondSubmissionId, Map.of(SimilarityMetric.AVG.name(), comparison.similarity(), SimilarityMetric.MAX.name(), comparison.maximalSimilarity()), convertMatchesToReportMatches(comparison)); - fileWriter.saveAsJSON(comparisonReport, path, fileName); + fileWriter.writeFile(comparisonReport, path, fileName); }); } diff --git a/core/src/main/java/de/jplag/reporting/jsonfactory/DummyWriter.java b/core/src/main/java/de/jplag/reporting/jsonfactory/DummyWriter.java deleted file mode 100644 index 7f8841fc9..000000000 --- a/core/src/main/java/de/jplag/reporting/jsonfactory/DummyWriter.java +++ /dev/null @@ -1,13 +0,0 @@ -package de.jplag.reporting.jsonfactory; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class DummyWriter implements FileWriter { - private static final Logger logger = LoggerFactory.getLogger(DummyWriter.class); - - @Override - public void saveAsJSON(Object fileToSave, String folderPath, String fileName) { - logger.info("DummyWriter writes object " + fileToSave + " to path " + folderPath + " with name " + fileName + " as JSON."); - } -} diff --git a/core/src/main/java/de/jplag/reporting/jsonfactory/FileWriter.java b/core/src/main/java/de/jplag/reporting/jsonfactory/FileWriter.java deleted file mode 100644 index e0198684b..000000000 --- a/core/src/main/java/de/jplag/reporting/jsonfactory/FileWriter.java +++ /dev/null @@ -1,5 +0,0 @@ -package de.jplag.reporting.jsonfactory; - -public interface FileWriter { - void saveAsJSON(Object fileToSave, String folderPath, String fileName); -} diff --git a/core/src/main/java/de/jplag/reporting/jsonfactory/ToDiskWriter.java b/core/src/main/java/de/jplag/reporting/jsonfactory/ToDiskWriter.java deleted file mode 100644 index 48722e6b1..000000000 --- a/core/src/main/java/de/jplag/reporting/jsonfactory/ToDiskWriter.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.jplag.reporting.jsonfactory; - -import java.io.IOException; -import java.nio.file.Path; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class ToDiskWriter implements FileWriter { - private static final Logger logger = LoggerFactory.getLogger(ToDiskWriter.class); - - private static final ObjectMapper objectMapper = new ObjectMapper(); - - /** - * Saves the provided object to the provided path under the provided name - * @param fileToSave The object to save - * @param folderPath The path to save the object to - * @param fileName The name to save the object under - */ - @Override - public void saveAsJSON(Object fileToSave, String folderPath, String fileName) { - try { - objectMapper.writeValue(Path.of(folderPath, fileName).toFile(), fileToSave); - } catch (IOException e) { - logger.error("Failed to save json file " + fileName + ": " + e.getMessage(), e); - } - } -} diff --git a/core/src/main/java/de/jplag/reporting/reportobject/ReportObjectFactory.java b/core/src/main/java/de/jplag/reporting/reportobject/ReportObjectFactory.java index 383788363..44c64eb1e 100644 --- a/core/src/main/java/de/jplag/reporting/reportobject/ReportObjectFactory.java +++ b/core/src/main/java/de/jplag/reporting/reportobject/ReportObjectFactory.java @@ -30,12 +30,13 @@ import de.jplag.Submission; import de.jplag.reporting.FilePathUtil; import de.jplag.reporting.jsonfactory.ComparisonReportWriter; -import de.jplag.reporting.jsonfactory.ToDiskWriter; import de.jplag.reporting.reportobject.mapper.ClusteringResultMapper; import de.jplag.reporting.reportobject.mapper.MetricMapper; import de.jplag.reporting.reportobject.model.OverviewReport; import de.jplag.reporting.reportobject.model.SubmissionFileIndex; import de.jplag.reporting.reportobject.model.Version; +import de.jplag.reporting.reportobject.writer.JsonWriter; +import de.jplag.reporting.reportobject.writer.TextWriter; /** * Factory class, responsible for converting a JPlagResult object to Overview and Comparison DTO classes and writing it @@ -46,8 +47,13 @@ public class ReportObjectFactory { private static final Logger logger = LoggerFactory.getLogger(ReportObjectFactory.class); - private static final ToDiskWriter fileWriter = new ToDiskWriter(); + private static final JsonWriter jsonFileWriter = new JsonWriter(); public static final String OVERVIEW_FILE_NAME = "overview.json"; + + public static final String README_FILE_NAME = "README.txt"; + private static final String[] README_CONTENT = new String[] {"This is a software plagiarism report generated by JPlag.", + "To view the report go to https://jplag.github.io/JPlag/ and drag the generated zip file onto the page."}; + public static final String SUBMISSIONS_FOLDER = "files"; public static final String SUBMISSION_FILE_INDEX_FILE_NAME = "submissionFileIndex.json"; public static final Version REPORT_VIEWER_VERSION = JPlag.JPLAG_VERSION; @@ -73,6 +79,7 @@ public File createAndSaveReport(JPlagResult result, String path) { writeComparisons(result, path); writeOverview(result, path); writeSubmissionIndexFile(result, path); + writeReadMeFile(path); logger.info("Zipping report files..."); zipAndDelete(path); @@ -161,7 +168,7 @@ private File getFileToCopy(Language language, File file) { } private void writeComparisons(JPlagResult result, String path) { - ComparisonReportWriter comparisonReportWriter = new ComparisonReportWriter(submissionToIdFunction, fileWriter); + ComparisonReportWriter comparisonReportWriter = new ComparisonReportWriter(submissionToIdFunction, jsonFileWriter); submissionNameToNameToComparisonFileName = comparisonReportWriter.writeComparisonReports(result, path); } @@ -196,8 +203,12 @@ private void writeOverview(JPlagResult result, String path) { clusteringResultMapper.map(result), // clusters totalComparisons); // totalComparisons - fileWriter.saveAsJSON(overviewReport, path, OVERVIEW_FILE_NAME); + jsonFileWriter.writeFile(overviewReport, path, OVERVIEW_FILE_NAME); + + } + private void writeReadMeFile(String path) { + new TextWriter().writeFile(String.join(System.lineSeparator(), README_CONTENT), path, README_FILE_NAME); } private void writeSubmissionIndexFile(JPlagResult result, String path) { @@ -212,7 +223,7 @@ private void writeSubmissionIndexFile(JPlagResult result, String path) { } fileIndex.fileIndexes().put(submissionNameToIdMap.get(submission.getName()), filePaths); } - fileWriter.saveAsJSON(fileIndex, path, SUBMISSION_FILE_INDEX_FILE_NAME); + jsonFileWriter.writeFile(fileIndex, path, SUBMISSION_FILE_INDEX_FILE_NAME); } private Set getSubmissions(List comparisons) { diff --git a/core/src/main/java/de/jplag/reporting/reportobject/writer/DummyWriter.java b/core/src/main/java/de/jplag/reporting/reportobject/writer/DummyWriter.java new file mode 100644 index 000000000..c344802dc --- /dev/null +++ b/core/src/main/java/de/jplag/reporting/reportobject/writer/DummyWriter.java @@ -0,0 +1,17 @@ +package de.jplag.reporting.reportobject.writer; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This writer is used as a mock for testing purposes only. + */ +public class DummyWriter extends JsonWriter { + private static final Logger logger = LoggerFactory.getLogger(DummyWriter.class); + private static final String MESSAGE = "DummyWriter writes object {} to path {} with name {} as JSON."; + + @Override + public void writeFile(Object fileToSave, String folderPath, String fileName) { + logger.info(MESSAGE, fileToSave, folderPath, fileName); + } +} diff --git a/core/src/main/java/de/jplag/reporting/reportobject/writer/FileWriter.java b/core/src/main/java/de/jplag/reporting/reportobject/writer/FileWriter.java new file mode 100644 index 000000000..ec8888a49 --- /dev/null +++ b/core/src/main/java/de/jplag/reporting/reportobject/writer/FileWriter.java @@ -0,0 +1,16 @@ +package de.jplag.reporting.reportobject.writer; + +/** + * Responsible for writing a specific file type to the disk. + * @param Object that the FileWriter writes. + */ +public interface FileWriter { + + /** + * Saves the provided object to the provided path under the provided name + * @param fileContent The object to save + * @param folderPath The path to save the object to + * @param fileName The name to save the object under + */ + void writeFile(T fileContent, String folderPath, String fileName); +} diff --git a/core/src/main/java/de/jplag/reporting/reportobject/writer/JsonWriter.java b/core/src/main/java/de/jplag/reporting/reportobject/writer/JsonWriter.java new file mode 100644 index 000000000..723718cf8 --- /dev/null +++ b/core/src/main/java/de/jplag/reporting/reportobject/writer/JsonWriter.java @@ -0,0 +1,29 @@ +package de.jplag.reporting.reportobject.writer; + +import java.io.IOException; +import java.nio.file.Path; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * Writes an object with {@link com.fasterxml.jackson.annotation.JsonProperty}s to the disk. + */ +public class JsonWriter implements FileWriter { + private static final Logger logger = LoggerFactory.getLogger(JsonWriter.class); + private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final String WRITE_ERROR = "Failed to write JSON file {}"; + + @Override + public void writeFile(Object fileToSave, String folderPath, String fileName) { + Path path = Path.of(folderPath, fileName); + try { + objectMapper.writeValue(path.toFile(), fileToSave); + } catch (IOException e) { + logger.error(WRITE_ERROR, e, path); + } + } + +} diff --git a/core/src/main/java/de/jplag/reporting/reportobject/writer/TextWriter.java b/core/src/main/java/de/jplag/reporting/reportobject/writer/TextWriter.java new file mode 100644 index 000000000..d4b3601d4 --- /dev/null +++ b/core/src/main/java/de/jplag/reporting/reportobject/writer/TextWriter.java @@ -0,0 +1,27 @@ +package de.jplag.reporting.reportobject.writer; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Path; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Writes plain text to a file. + */ +public class TextWriter implements FileWriter { + + private static final Logger logger = LoggerFactory.getLogger(TextWriter.class); + private static final String WRITE_ERROR = "Failed to write text file {}"; + + @Override + public void writeFile(String fileContent, String folderPath, String fileName) { + String path = Path.of(folderPath, fileName).toString(); + try (BufferedWriter writer = new BufferedWriter(new java.io.FileWriter(path))) { + writer.write(fileContent); + } catch (IOException e) { + logger.error(WRITE_ERROR, e, path); + } + } +} diff --git a/core/src/test/java/de/jplag/reporting/reportobject/mapper/ComparisonReportWriterTest.java b/core/src/test/java/de/jplag/reporting/reportobject/mapper/ComparisonReportWriterTest.java index ffde264e9..02af18f52 100644 --- a/core/src/test/java/de/jplag/reporting/reportobject/mapper/ComparisonReportWriterTest.java +++ b/core/src/test/java/de/jplag/reporting/reportobject/mapper/ComparisonReportWriterTest.java @@ -10,11 +10,11 @@ import de.jplag.TestBase; import de.jplag.exceptions.ExitException; import de.jplag.reporting.jsonfactory.ComparisonReportWriter; -import de.jplag.reporting.jsonfactory.DummyWriter; -import de.jplag.reporting.jsonfactory.FileWriter; +import de.jplag.reporting.reportobject.writer.DummyWriter; +import de.jplag.reporting.reportobject.writer.JsonWriter; public class ComparisonReportWriterTest extends TestBase { - private final FileWriter fileWriter = new DummyWriter(); + private final JsonWriter fileWriter = new DummyWriter(); @Test public void firsLevelOfLookupMapComplete() throws ExitException { diff --git a/endtoend-testing/pom.xml b/endtoend-testing/pom.xml index a13a101fb..343135356 100644 --- a/endtoend-testing/pom.xml +++ b/endtoend-testing/pom.xml @@ -30,5 +30,11 @@ com.fasterxml.jackson.core jackson-databind + + com.tngtech.archunit + archunit-junit5 + 1.2.0 + test + diff --git a/endtoend-testing/src/main/java/de/jplag/endtoend/helper/UnzipManager.java b/endtoend-testing/src/main/java/de/jplag/endtoend/helper/UnzipManager.java index 4c363d39c..332819cb5 100644 --- a/endtoend-testing/src/main/java/de/jplag/endtoend/helper/UnzipManager.java +++ b/endtoend-testing/src/main/java/de/jplag/endtoend/helper/UnzipManager.java @@ -9,16 +9,17 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; -import java.util.logging.Logger; import org.apache.commons.lang3.SystemUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import de.jplag.endtoend.model.DataSet; public class UnzipManager { private final Map unzippedFiles; private static UnzipManager instance; - private final Logger logger = Logger.getLogger("Unzip Manager"); + private final Logger logger = LoggerFactory.getLogger(UnzipManager.class); private static synchronized UnzipManager getInstance() { if (instance == null) { @@ -46,7 +47,7 @@ private File unzipOrCacheInternal(DataSet dataSet, File zip) throws IOException } else { target = Files.createTempDirectory(zip.getName()).toFile(); if (!(target.setReadable(true, true) && target.setWritable(true, true) && target.setExecutable(true, true))) { - logger.warning("Could not set permissions for temp directory (" + target.getAbsolutePath() + ")."); + logger.warn("Could not set permissions for temp directory ({}).", target.getAbsolutePath()); } } diff --git a/endtoend-testing/src/test/java/de/jplag/endtoend/architecture/JPlagArchitectureTest.java b/endtoend-testing/src/test/java/de/jplag/endtoend/architecture/JPlagArchitectureTest.java new file mode 100644 index 000000000..4c093148d --- /dev/null +++ b/endtoend-testing/src/test/java/de/jplag/endtoend/architecture/JPlagArchitectureTest.java @@ -0,0 +1,18 @@ +package de.jplag.endtoend.architecture; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.fields; +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.lang.ArchRule; + +@AnalyzeClasses(packages = "de.jplag") +public class JPlagArchitectureTest { + @ArchTest + public static final ArchRule enforceCorrectLogger = noClasses().should().accessClassesThat() + .haveNameMatching(java.util.logging.Logger.class.getName()); + + @ArchTest + public static final ArchRule enforceNameOfLogger = fields().that().haveRawType(org.slf4j.Logger.class).should().haveName("logger"); +} diff --git a/language-testutils/src/test/java/de/jplag/testutils/LanguageModuleTest.java b/language-testutils/src/test/java/de/jplag/testutils/LanguageModuleTest.java index 46133a743..37b8338cd 100644 --- a/language-testutils/src/test/java/de/jplag/testutils/LanguageModuleTest.java +++ b/language-testutils/src/test/java/de/jplag/testutils/LanguageModuleTest.java @@ -13,8 +13,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.BeforeAll; @@ -22,6 +20,8 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import de.jplag.Language; import de.jplag.ParsingException; @@ -40,7 +40,7 @@ public abstract class LanguageModuleTest { private static final Path DEFAULT_TEST_CODE_PATH_BASE = Path.of("src", "test", "resources", "de", "jplag"); - private final Logger LOG = Logger.getLogger(this.getClass().getName()); + private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final TestDataCollector collector; private final Language language; @@ -253,7 +253,7 @@ final void collectTestData() { private List parseTokens(TestData source) throws ParsingException, IOException { List tokens = source.parseTokens(this.language); - LOG.log(Level.INFO, TokenPrinter.printTokens(tokens)); + logger.info(TokenPrinter.printTokens(tokens)); return tokens; } diff --git a/report-viewer/.lintstagedrc.json b/report-viewer/.lintstagedrc.json index 5c5cdfd30..980a246ef 100644 --- a/report-viewer/.lintstagedrc.json +++ b/report-viewer/.lintstagedrc.json @@ -1,7 +1,7 @@ { - "*.ts": ["npx prettier --write", "npx eslint"], - "*.vue": ["npx prettier --write", "npx eslint"], - "*.js": ["npx prettier --write", "npx eslint"], - "*.html": ["npx prettier --write", "npx eslint"], + "*.ts": ["npx prettier --write", "npx eslint --max-warnings 0"], + "*.vue": ["npx prettier --write", "npx eslint --max-warnings 0"], + "*.js": ["npx prettier --write", "npx eslint --max-warnings 0"], + "*.html": ["npx prettier --write", "npx eslint --max-warnings 0"], "*.css": ["npx prettier --write"] } diff --git a/report-viewer/package-lock.json b/report-viewer/package-lock.json index e554ac40b..2c252ded4 100644 --- a/report-viewer/package-lock.json +++ b/report-viewer/package-lock.json @@ -8,9 +8,9 @@ "name": "report-viewer", "version": "0.0.0", "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.4.2", - "@fortawesome/free-regular-svg-icons": "^6.4.2", - "@fortawesome/free-solid-svg-icons": "^6.4.2", + "@fortawesome/fontawesome-svg-core": "^6.5.0", + "@fortawesome/free-regular-svg-icons": "^6.5.0", + "@fortawesome/free-solid-svg-icons": "^6.5.0", "@fortawesome/vue-fontawesome": "^3.0.5", "chart.js": "^4.4.0", "chartjs-plugin-datalabels": "^2.2.0", @@ -492,45 +492,45 @@ } }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", - "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.0.tgz", + "integrity": "sha512-vYC8oN2l8meu05sRi1j3Iie/HNFAeIxpitYFhsUrBc11TxiMken9QdXnSQ0q16FYsOSt/6soxs5ghdk+VYGiog==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", - "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.0.tgz", + "integrity": "sha512-5DrR+oxQr+ruRQ3CEVV8DSCT/q8Atm56+FzAs0P6eW/epW47OmecSpSwc/YTlJ3u5BfPKUBSGyPR2qjZ+5eIgA==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@fortawesome/fontawesome-common-types": "6.5.0" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-regular-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.2.tgz", - "integrity": "sha512-0+sIUWnkgTVVXVAPQmW4vxb9ZTHv0WstOa3rBx9iPxrrrDH6bNLsDYuwXF9b6fGm+iR7DKQvQshUH/FJm3ed9Q==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.5.0.tgz", + "integrity": "sha512-RaBW/y0jKcCyEPM+NYuBs3bQXuLYZHnXABQPmg6qwuRxNb2EUmyCcVUECUH2dkFmMjggh/xvl6n6y62Pl19JkA==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@fortawesome/fontawesome-common-types": "6.5.0" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz", - "integrity": "sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.0.tgz", + "integrity": "sha512-6ZPq8mme67Q7O9Fbp2O+Z7mPZbcWTsRv555JLftLaTodiV0Wq+99YgMhyQ8O6mgNQfComqS9OEvqs7M8ySA92g==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@fortawesome/fontawesome-common-types": "6.5.0" }, "engines": { "node": ">=6" diff --git a/report-viewer/package.json b/report-viewer/package.json index 5cc80cb9e..01b34ba14 100644 --- a/report-viewer/package.json +++ b/report-viewer/package.json @@ -12,14 +12,14 @@ "build-prod": "run-p type-check && vite build --mode prod", "build-dev": "run-p type-check && vite build --mode dev", "type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false", - "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore --max-warnings 0", "format": "prettier --write src/", "prepare": "cd .. && husky install report-viewer/.husky" }, "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.4.2", - "@fortawesome/free-regular-svg-icons": "^6.4.2", - "@fortawesome/free-solid-svg-icons": "^6.4.2", + "@fortawesome/fontawesome-svg-core": "^6.5.0", + "@fortawesome/free-regular-svg-icons": "^6.5.0", + "@fortawesome/free-solid-svg-icons": "^6.5.0", "@fortawesome/vue-fontawesome": "^3.0.5", "chart.js": "^4.4.0", "chartjs-plugin-datalabels": "^2.2.0", diff --git a/report-viewer/tests/unit/components/VersionInfoComponent.test.ts b/report-viewer/tests/unit/components/VersionInfoComponent.test.ts index ffcbabab2..6cbb9966b 100644 --- a/report-viewer/tests/unit/components/VersionInfoComponent.test.ts +++ b/report-viewer/tests/unit/components/VersionInfoComponent.test.ts @@ -1,6 +1,6 @@ import VersionInfoComponent from '@/components/VersionInfoComponent.vue' import { flushPromises, mount } from '@vue/test-utils' -import { describe, it, vi, expect, beforeAll } from 'vitest' +import { describe, it, vi, expect } from 'vitest' import * as versionTsFile from '@/model/Version' import { Version } from '@/model/Version'