Skip to content

Commit 8ed08e2

Browse files
committed
feat: load and store in CSV file
1 parent e5ddde6 commit 8ed08e2

5 files changed

Lines changed: 57 additions & 0 deletions

File tree

api-app/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/testdata
12
/application.yml
23
/application.yaml
34
/application.properties

api-app/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ all: dist check
44

55
clean:
66
./gradlew clean
7+
rm -rf testdata
78

89
distclean: clean
910
rm -rf .gradle

api-app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ dependencyManagement {
2929
}
3030

3131
dependencies {
32+
implementation("org.apache.commons:commons-csv:1.14.0")
3233
implementation("com.azure.spring:spring-cloud-azure-starter-active-directory")
3334
implementation("com.azure.spring:spring-cloud-azure-starter-actuator")
3435
implementation("org.springframework.boot:spring-boot-starter-actuator")
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// TODO Handle row number as ID
2+
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Copyright (c) 2025 Falko Schumann. All rights reserved. MIT license.
2+
3+
package de.muspellheim.activitysampling.api.integration;
4+
5+
import static org.junit.jupiter.api.Assertions.assertEquals;
6+
7+
import de.muspellheim.activitysampling.api.infrastructure.ActivityDto;
8+
import de.muspellheim.activitysampling.api.infrastructure.CsvActivitiesRepository;
9+
import java.nio.file.Files;
10+
import java.nio.file.Path;
11+
import java.nio.file.Paths;
12+
import java.time.Instant;
13+
import java.util.List;
14+
import org.junit.jupiter.api.BeforeEach;
15+
import org.junit.jupiter.api.Test;
16+
17+
class CsvActivitiesRepositoryTests {
18+
19+
private static final Path TEST_FILE = Paths.get("testdata", "activities.csv");
20+
21+
@BeforeEach
22+
void setUp() throws Exception {
23+
Files.deleteIfExists(TEST_FILE);
24+
Files.createDirectories(TEST_FILE.getParent());
25+
}
26+
27+
@Test
28+
void createsEmptyRepository() {
29+
var repository = new CsvActivitiesRepository(TEST_FILE);
30+
31+
assertEquals(List.of(), repository.findAll());
32+
}
33+
34+
@Test
35+
void findsByTimestampGreaterThanEqualOrderByTimestampDesc() {
36+
var repository = new CsvActivitiesRepository(TEST_FILE);
37+
repository.save(
38+
ActivityDto.createTestInstance().withTimestamp(Instant.parse("2023-01-01T11:00:00Z")));
39+
var activity2 =
40+
repository.save(
41+
ActivityDto.createTestInstance().withTimestamp(Instant.parse("2023-01-01T12:00:00Z")));
42+
var activity3 =
43+
repository.save(
44+
ActivityDto.createTestInstance().withTimestamp(Instant.parse("2023-01-01T13:00:00Z")));
45+
46+
var activities =
47+
repository.findByTimestampGreaterThanEqualOrderByTimestampDesc(
48+
Instant.parse("2023-01-01T12:00:00Z"));
49+
50+
assertEquals(List.of(activity3, activity2), activities);
51+
}
52+
}

0 commit comments

Comments
 (0)