/*
* This file is part of Fim - File Integrity Manager
*
* Copyright (C) 2017 Etienne Vrignaud
*
* Fim is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Fim is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Fim. If not, see <http://www.gnu.org/licenses/>.
*/
package org.fim.tooling;
import org.fim.model.CompareResult;
import org.fim.model.Difference;
import org.fim.model.FileHash;
import org.fim.model.FileState;
import org.fim.model.FileTime;
import org.fim.model.Modification;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat;
public class StateAssert {
protected BuildableContext defaultContext() {
return new BuildableContext();
}
public static List<FileState> createFileStates(int count) {
List<FileState> fileStates = new ArrayList<>();
for (int index = 0; index < count; index++) {
FileState fileState = new FileState("file_" + index, 256, new FileTime(512, 512), new FileHash("A", "A", "A"), new ArrayList<>());
fileStates.add(fileState);
}
return fileStates;
}
protected void assertNothingModified(CompareResult result) {
assertThat(result.somethingModified()).isFalse();
}
protected void assertOnlyFilesAdded(CompareResult result, String... fileNames) {
assertGotOnlyModifications(result, Modification.added);
assertFilesModified(result, Modification.added, fileNames);
}
protected void assertOnlyFileCopied(CompareResult result, FileNameDiff... fileNameDiffs) {
assertGotOnlyModifications(result, Modification.copied);
assertFilesModified(result, Modification.copied, fileNameDiffs);
}
protected void assertOnlyFileDuplicated(CompareResult result, FileNameDiff... fileNameDiffs) {
assertGotOnlyModifications(result, Modification.duplicated);
assertFilesModified(result, Modification.duplicated, fileNameDiffs);
}
protected void assertOnlyDatesModified(CompareResult result, String... fileNames) {
assertGotOnlyModifications(result, Modification.dateModified);
assertFilesModified(result, Modification.dateModified, fileNames);
}
protected void assertOnlyContentModified(CompareResult result, String... fileNames) {
assertGotOnlyModifications(result, Modification.contentModified);
assertFilesModified(result, Modification.contentModified, fileNames);
}
protected void assertOnlyFileRenamed(CompareResult result, FileNameDiff... fileNameDiffs) {
assertGotOnlyModifications(result, Modification.renamed);
assertFilesModified(result, Modification.renamed, fileNameDiffs);
}
protected void assertOnlyFileDeleted(CompareResult result, String... fileNames) {
assertGotOnlyModifications(result, Modification.deleted);
assertFilesModified(result, Modification.deleted, fileNames);
}
protected void assertGotOnlyModifications(CompareResult result, Modification... modifications) {
List<Modification> modificationsList = Arrays.asList(modifications);
for (Modification modification : Modification.values()) {
List<Difference> differences = getDifferences(result, modification);
if (modificationsList.contains(modification) == false) {
assertThat(differences.isEmpty()).isTrue();
} else {
assertThat(differences.isEmpty()).isFalse();
}
}
}
protected void assertFilesModified(CompareResult result, Modification modification, String... fileNames) {
List<String> fileNamesList = Arrays.asList(fileNames);
List<Difference> differences = getDifferences(result, modification);
assertThat(fileNamesList.size()).isEqualTo(differences.size());
for (Difference difference : differences) {
assertThat(fileNamesList.contains(difference.getFileState().getFileName())).isTrue();
}
}
protected void assertFilesModified(CompareResult result, Modification modification, FileNameDiff... fileNameDiffs) {
List<FileNameDiff> fileNameDiffsList = Arrays.asList(fileNameDiffs);
List<Difference> differences = getDifferences(result, modification);
assertThat(fileNameDiffsList.size()).isEqualTo(differences.size());
for (Difference difference : differences) {
assertThat(fileNameDiffsList.contains(new FileNameDiff(difference))).isTrue();
}
}
private List<Difference> getDifferences(CompareResult result, Modification modification) {
switch (modification) {
case added:
return result.getAdded();
case copied:
return result.getCopied();
case duplicated:
return result.getDuplicated();
case dateModified:
return result.getDateModified();
case contentModified:
return result.getContentModified();
case attributesModified:
return result.getAttributesModified();
case renamed:
return result.getRenamed();
case deleted:
return result.getDeleted();
case corrupted:
return result.getCorrupted();
}
throw new IllegalArgumentException("Invalid Modification " + modification);
}
protected List<String> toFileNames(List<FileState> fileStates) {
List<String> fileNames = fileStates.stream().map(FileState::getFileName).collect(Collectors.toList());
return fileNames;
}
}