Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,25 @@
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.10</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Expand Down
56 changes: 56 additions & 0 deletions src/test/java/de/eemkeen/MicrostreamApplicationTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package de.eemkeen;

import de.eemkeen.model.User;
import de.eemkeen.repo.UserRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.boot.SpringApplication;

import java.util.Collections;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class MicrostreamApplicationTest {

@Mock
private UserRepository userRepository;

@InjectMocks
private MicrostreamApplication microstreamApplication;

@Test
void listUserOnStartup_shouldAddUserAndPrintUsers() {
// Arrange
User user = User.builder().name("Test User").build();
when(userRepository.add(any(User.class))).thenReturn(user);
when(userRepository.getAll()).thenReturn(Collections.singletonList(user));

// Act
microstreamApplication.listUserOnStartup();

// Assert
verify(userRepository).add(any(User.class));
verify(userRepository).getAll();
}

@Test
void main_shouldRunSpringApplication() {
// Use PowerMockito to mock the static method
try (var springAppMock = mockStatic(SpringApplication.class)) {
// Act
String[] args = new String[0];
MicrostreamApplication.main(args);

// Assert
springAppMock.verify(() ->
SpringApplication.run(eq(MicrostreamApplication.class), eq(args))
);
}
}
}
4 changes: 2 additions & 2 deletions src/test/java/de/eemkeen/MicrostreamApplicationTests.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package de.eemkeen;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class MicrostreamApplicationTests {

@Test
@Disabled("Skipping integration test as it requires LocalStack to be running")
void contextLoads() {}
}
45 changes: 45 additions & 0 deletions src/test/java/de/eemkeen/TestConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package de.eemkeen;

import de.eemkeen.model.Root;
import de.eemkeen.repo.UserRepository;
import one.microstream.afs.blobstore.types.BlobStoreFileSystem;
import one.microstream.storage.embedded.types.EmbeddedStorageManager;
import org.mockito.Mockito;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import software.amazon.awssdk.services.s3.S3Client;

@TestConfiguration
public class TestConfig {

@Bean
@Primary
public S3Client s3Client() {
return Mockito.mock(S3Client.class);
}

@Bean
@Primary
public BlobStoreFileSystem blobStoreFileSystem() {
return Mockito.mock(BlobStoreFileSystem.class);
}

@Bean
@Primary
public EmbeddedStorageManager embeddedStorageManager() {
return Mockito.mock(EmbeddedStorageManager.class);
}

@Bean
@Primary
public Root root() {
return Mockito.mock(Root.class);
}

@Bean
@Primary
public UserRepository userRepository() {
return Mockito.mock(UserRepository.class);
}
}
34 changes: 34 additions & 0 deletions src/test/java/de/eemkeen/configuration/TestConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package de.eemkeen.configuration;

import de.eemkeen.model.Root;
import one.microstream.afs.blobstore.types.BlobStoreFileSystem;
import one.microstream.storage.embedded.types.EmbeddedStorageManager;
import org.mockito.Mockito;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import software.amazon.awssdk.services.s3.S3Client;

@TestConfiguration
public class TestConfig {

@Bean
@Primary
public S3Client s3Client() {
return Mockito.mock(S3Client.class);
}

@Bean
@Primary
public BlobStoreFileSystem blobStorage() {
return Mockito.mock(BlobStoreFileSystem.class);
}

@Bean
@Primary
public EmbeddedStorageManager storageManager() {
EmbeddedStorageManager mock = Mockito.mock(EmbeddedStorageManager.class);
Mockito.when(mock.root()).thenReturn(new Root());
return mock;
}
}
62 changes: 62 additions & 0 deletions src/test/java/de/eemkeen/model/InitializerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package de.eemkeen.model;

import one.microstream.persistence.types.Storer;
import one.microstream.storage.types.StorageManager;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.ArrayList;

import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class InitializerTest {

@Mock
private StorageManager storageManager;

@Mock
private Root root;

@Mock
private Storer storer;

private Initializer initializer;

@BeforeEach
void setUp() {
initializer = new Initializer();
when(storageManager.root()).thenReturn(root);
}

@Test
void initialize_shouldStoreRootWhenUsersEmpty() {
// Arrange
when(root.getUsers()).thenReturn(new ArrayList<>());
when(storageManager.createEagerStorer()).thenReturn(storer);

// Act
initializer.initialize(storageManager);

// Assert
verify(storageManager).createEagerStorer();
verify(storer).store(root);
}

@Test
void initialize_shouldNotStoreRootWhenUsersNotEmpty() {
// Arrange
ArrayList<User> users = new ArrayList<>();
users.add(User.builder().name("Existing User").build());
when(root.getUsers()).thenReturn(users);

// Act
initializer.initialize(storageManager);

// Assert
verify(storageManager, never()).createEagerStorer();
}
}
95 changes: 95 additions & 0 deletions src/test/java/de/eemkeen/model/RootTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package de.eemkeen.model;

import one.microstream.storage.types.StorageManager;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.util.ReflectionTestUtils;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;

@ExtendWith(MockitoExtension.class)
class RootTest {

@Mock
private StorageManager storageManager;

private Root root;
private User testUser;

@BeforeEach
void setUp() {
root = new Root();
ReflectionTestUtils.setField(root, "storageManager", storageManager);
testUser = User.builder().name("Test User").build();
}

@Test
void getUsers_shouldReturnEmptyListInitially() {
// Act
List<User> users = root.getUsers();

// Assert
assertNotNull(users);
assertTrue(users.isEmpty());
}

@Test
void getUsers_shouldReturnCopyOfUsersList() {
// Arrange
root.addUser(testUser);

// Act
List<User> users = root.getUsers();
users.clear(); // Modify the returned list

// Assert
assertEquals(1, root.getUsers().size()); // Original list should still have the user
}

@Test
void addUser_shouldAddUserToList() {
// Act
User addedUser = root.addUser(testUser);

// Assert
assertEquals(testUser, addedUser);
assertEquals(1, root.getUsers().size());
assertEquals(testUser, root.getUsers().get(0));
verify(storageManager).store(root.getUsers());
}

@Test
void updateUser_shouldStoreUser() {
// Arrange
root.addUser(testUser);

// Act
root.updateUser(testUser);

// Assert
verify(storageManager).store(testUser);
}

@Test
void removeUser_shouldRemoveUserFromList() {
// Arrange
root.addUser(testUser);
assertEquals(1, root.getUsers().size());
// Reset the mock to clear the first store call from addUser
reset(storageManager);

// Act
root.removeUser(testUser);

// Assert
assertTrue(root.getUsers().isEmpty());
verify(storageManager).store(root.getUsers());
}
}
Loading