Skip to content

Commit

Permalink
Check for existing Mod UID
Browse files Browse the repository at this point in the history
Fixes #99
  • Loading branch information
micheljung committed May 29, 2017
1 parent ab131ff commit 70c604c
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/main/java/com/faforever/api/mod/ModService.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ public void processUploadedMod(Path uploadedFile, Player uploader) {
throw new ApiException(new Error(ErrorCode.MOD_NOT_ORIGINAL_AUTHOR));
}

if (modExists(displayName, version)) {
String uid = modInfo.getUid();
if (modExists(displayName, version, uid)) {
throw new ApiException(new Error(ErrorCode.MOD_VERSION_EXISTS));
}

Expand Down Expand Up @@ -93,13 +94,15 @@ public void processUploadedMod(Path uploadedFile, Player uploader) {
}
}

private boolean modExists(String displayName, short version) {
ModVersion probe = new ModVersion()
private boolean modExists(String displayName, short version, String uid) {
ModVersion versionAndNameProbe = new ModVersion()
.setVersion(version)
.setMod(new Mod()
.setDisplayName(displayName)
);
return modVersionRepository.exists(Example.of(probe, ExampleMatcher.matching().withIgnoreCase()));

return modVersionRepository.exists(Example.of(versionAndNameProbe, ExampleMatcher.matching().withIgnoreCase()))
|| modVersionRepository.existsByUid(uid);
}

private boolean canUploadMod(String displayName, Player uploader) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@

@Repository
public interface ModVersionRepository extends JpaRepository<ModVersion, Integer> {
boolean existsByUid(String uid);
}
6 changes: 6 additions & 0 deletions src/test/java/com/faforever/api/mod/ModServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.data.domain.Example;

import java.io.BufferedInputStream;
import java.io.InputStream;
Expand Down Expand Up @@ -51,6 +52,7 @@ public void setUp() throws Exception {
}

@Test
@SuppressWarnings("unchecked")
public void processUploadedMod() throws Exception {
Path uploadedFile = temporaryFolder.getRoot().toPath().resolve("uploaded-mod.zip");
try (InputStream inputStream = new BufferedInputStream(getClass().getResourceAsStream(TEST_MOD))) {
Expand Down Expand Up @@ -83,6 +85,10 @@ public void processUploadedMod() throws Exception {
assertThat(savedModVersion.getMod(), is(savedMod));
assertThat(savedModVersion.isRanked(), is(false));
assertThat(savedModVersion.isHidden(), is(false));

ArgumentCaptor<Example<ModVersion>> exampleCaptor = ArgumentCaptor.forClass((Class) ModVersion.class);
verify(modVersionRepository).exists(exampleCaptor.capture());
verify(modVersionRepository).existsByUid("26778D4E-BA75-5CC2-CBA8-63795BDE74AA");
}

// TODO test error cases
Expand Down

0 comments on commit 70c604c

Please sign in to comment.