Add sqlite

This commit is contained in:
2025-12-04 17:01:49 +01:00
parent 93db7c2d2f
commit 1d1a3a2265
9 changed files with 260 additions and 61 deletions

View File

@@ -2,6 +2,10 @@ package com.imgfloat.app;
import com.imgfloat.app.model.TransformRequest;
import com.imgfloat.app.model.VisibilityRequest;
import com.imgfloat.app.model.Asset;
import com.imgfloat.app.model.Channel;
import com.imgfloat.app.repository.AssetRepository;
import com.imgfloat.app.repository.ChannelRepository;
import com.imgfloat.app.service.ChannelDirectoryService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -12,22 +16,35 @@ import org.springframework.mock.web.MockMultipartFile;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import javax.imageio.ImageIO;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.verify;
class ChannelDirectoryServiceTest {
private ChannelDirectoryService service;
private SimpMessagingTemplate messagingTemplate;
private ChannelRepository channelRepository;
private AssetRepository assetRepository;
@BeforeEach
void setup() {
messagingTemplate = mock(SimpMessagingTemplate.class);
service = new ChannelDirectoryService(messagingTemplate);
channelRepository = mock(ChannelRepository.class);
assetRepository = mock(AssetRepository.class);
setupInMemoryPersistence();
service = new ChannelDirectoryService(channelRepository, assetRepository, messagingTemplate);
}
@Test
@@ -66,4 +83,42 @@ class ChannelDirectoryServiceTest {
ImageIO.write(image, "png", out);
return out.toByteArray();
}
private void setupInMemoryPersistence() {
Map<String, Channel> channels = new ConcurrentHashMap<>();
Map<String, Asset> assets = new ConcurrentHashMap<>();
when(channelRepository.findById(anyString()))
.thenAnswer(invocation -> Optional.ofNullable(channels.get(invocation.getArgument(0))));
when(channelRepository.save(any(Channel.class)))
.thenAnswer(invocation -> {
Channel channel = invocation.getArgument(0);
channels.put(channel.getBroadcaster(), channel);
return channel;
});
when(channelRepository.findAll())
.thenAnswer(invocation -> List.copyOf(channels.values()));
when(assetRepository.save(any(Asset.class)))
.thenAnswer(invocation -> {
Asset asset = invocation.getArgument(0);
assets.put(asset.getId(), asset);
return asset;
});
when(assetRepository.findById(anyString()))
.thenAnswer(invocation -> Optional.ofNullable(assets.get(invocation.getArgument(0))));
when(assetRepository.findByBroadcaster(anyString()))
.thenAnswer(invocation -> filterAssetsByBroadcaster(assets.values(), invocation.getArgument(0), false));
when(assetRepository.findByBroadcasterAndHiddenFalse(anyString()))
.thenAnswer(invocation -> filterAssetsByBroadcaster(assets.values(), invocation.getArgument(0), true));
doAnswer(invocation -> assets.remove(invocation.getArgument(0, Asset.class).getId()))
.when(assetRepository).delete(any(Asset.class));
}
private List<Asset> filterAssetsByBroadcaster(Collection<Asset> assets, String broadcaster, boolean onlyVisible) {
return assets.stream()
.filter(asset -> asset.getBroadcaster().equalsIgnoreCase(broadcaster))
.filter(asset -> !onlyVisible || !asset.isHidden())
.toList();
}
}