mirror of
https://github.com/imgfloat/server.git
synced 2026-05-08 10:19:35 +00:00
test: add AccountServiceTest (6 tests) covering deleteAccount behaviour
This commit is contained in:
@@ -0,0 +1,124 @@
|
|||||||
|
package dev.kruhlmann.imgfloat.service;
|
||||||
|
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
import static org.mockito.ArgumentMatchers.contains;
|
||||||
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.never;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import dev.kruhlmann.imgfloat.model.AssetType;
|
||||||
|
import dev.kruhlmann.imgfloat.model.db.imgfloat.Asset;
|
||||||
|
import dev.kruhlmann.imgfloat.model.db.imgfloat.ScriptAssetFile;
|
||||||
|
import dev.kruhlmann.imgfloat.repository.AssetRepository;
|
||||||
|
import dev.kruhlmann.imgfloat.repository.ChannelRepository;
|
||||||
|
import dev.kruhlmann.imgfloat.repository.MarketplaceScriptHeartRepository;
|
||||||
|
import dev.kruhlmann.imgfloat.repository.ScriptAssetFileRepository;
|
||||||
|
import dev.kruhlmann.imgfloat.repository.SystemAdministratorRepository;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
|
||||||
|
class AccountServiceTest {
|
||||||
|
|
||||||
|
private ChannelDirectoryService channelDirectoryService;
|
||||||
|
private AssetRepository assetRepository;
|
||||||
|
private ChannelRepository channelRepository;
|
||||||
|
private ScriptAssetFileRepository scriptAssetFileRepository;
|
||||||
|
private MarketplaceScriptHeartRepository heartRepository;
|
||||||
|
private SystemAdministratorRepository sysadminRepository;
|
||||||
|
private AssetStorageService assetStorageService;
|
||||||
|
private JdbcTemplate jdbcTemplate;
|
||||||
|
private AuditLogService auditLogService;
|
||||||
|
private AccountService service;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setup() {
|
||||||
|
channelDirectoryService = mock(ChannelDirectoryService.class);
|
||||||
|
assetRepository = mock(AssetRepository.class);
|
||||||
|
channelRepository = mock(ChannelRepository.class);
|
||||||
|
scriptAssetFileRepository = mock(ScriptAssetFileRepository.class);
|
||||||
|
heartRepository = mock(MarketplaceScriptHeartRepository.class);
|
||||||
|
sysadminRepository = mock(SystemAdministratorRepository.class);
|
||||||
|
assetStorageService = mock(AssetStorageService.class);
|
||||||
|
jdbcTemplate = mock(JdbcTemplate.class);
|
||||||
|
auditLogService = mock(AuditLogService.class);
|
||||||
|
|
||||||
|
service = new AccountService(
|
||||||
|
channelDirectoryService, assetRepository, channelRepository,
|
||||||
|
scriptAssetFileRepository, heartRepository, sysadminRepository,
|
||||||
|
assetStorageService, jdbcTemplate, auditLogService
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void deleteAccountNormalizesUsername() {
|
||||||
|
when(assetRepository.findByBroadcaster("uppercase")).thenReturn(List.of());
|
||||||
|
when(scriptAssetFileRepository.findByBroadcaster("uppercase")).thenReturn(List.of());
|
||||||
|
|
||||||
|
service.deleteAccount("UPPERCASE");
|
||||||
|
|
||||||
|
verify(assetRepository).findByBroadcaster("uppercase");
|
||||||
|
verify(channelRepository).deleteById("uppercase");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void deleteAccountSkipsBlankUsername() {
|
||||||
|
service.deleteAccount("");
|
||||||
|
service.deleteAccount(" ");
|
||||||
|
service.deleteAccount(null);
|
||||||
|
|
||||||
|
verify(assetRepository, never()).findByBroadcaster(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void deleteAccountDeletesAllAssets() {
|
||||||
|
Asset asset = new Asset("user", AssetType.IMAGE);
|
||||||
|
when(assetRepository.findByBroadcaster("user")).thenReturn(List.of(asset));
|
||||||
|
when(scriptAssetFileRepository.findByBroadcaster("user")).thenReturn(List.of());
|
||||||
|
|
||||||
|
service.deleteAccount("user");
|
||||||
|
|
||||||
|
verify(channelDirectoryService).deleteAsset(asset.getId(), "user");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void deleteAccountDeletesScriptAssetFilesFromDisk() {
|
||||||
|
when(assetRepository.findByBroadcaster("user")).thenReturn(List.of());
|
||||||
|
ScriptAssetFile file = new ScriptAssetFile("user", AssetType.SCRIPT);
|
||||||
|
file.setMediaType("application/javascript");
|
||||||
|
when(scriptAssetFileRepository.findByBroadcaster("user")).thenReturn(List.of(file));
|
||||||
|
|
||||||
|
service.deleteAccount("user");
|
||||||
|
|
||||||
|
verify(assetStorageService).deleteAsset(eq("user"), eq(file.getId()), eq("application/javascript"), eq(false));
|
||||||
|
verify(scriptAssetFileRepository).delete(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void deleteAccountCleansUpAllRepositories() {
|
||||||
|
when(assetRepository.findByBroadcaster("user")).thenReturn(List.of());
|
||||||
|
when(scriptAssetFileRepository.findByBroadcaster("user")).thenReturn(List.of());
|
||||||
|
|
||||||
|
service.deleteAccount("user");
|
||||||
|
|
||||||
|
verify(heartRepository).deleteByUsername("user");
|
||||||
|
verify(sysadminRepository).deleteByTwitchUsername("user");
|
||||||
|
verify(channelRepository).deleteById("user");
|
||||||
|
verify(auditLogService).deleteEntriesForBroadcaster("user");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void deleteAccountCleansUpSessionTables() {
|
||||||
|
when(assetRepository.findByBroadcaster("user")).thenReturn(List.of());
|
||||||
|
when(scriptAssetFileRepository.findByBroadcaster("user")).thenReturn(List.of());
|
||||||
|
|
||||||
|
service.deleteAccount("user");
|
||||||
|
|
||||||
|
verify(jdbcTemplate).update(contains("SPRING_SESSION_ATTRIBUTES"), eq("user"));
|
||||||
|
verify(jdbcTemplate).update(eq("DELETE FROM SPRING_SESSION WHERE PRINCIPAL_NAME = ?"), eq("user"));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user