diff --git a/server/Models/import java.time.java b/server/Models/import java.time.java new file mode 100644 index 0000000..a9de50a --- /dev/null +++ b/server/Models/import java.time.java @@ -0,0 +1,43 @@ +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.util.HashMap; +import java.util.Map; + +public class Broadcast { + private String status; + private String sendToTag; + private OffsetDateTime createdAt; + private String name; + private String slug; + + public Broadcast() { + this.status = "pending"; + this.sendToTag = "*"; + this.createdAt = OffsetDateTime.now(ZoneOffset.UTC); + } + + public static Broadcast fromMarkdownEmail(MarkdownEmail markdownEmail) { + Broadcast broadcast = new Broadcast(); + broadcast.name = markdownEmail.getData().getSubject(); + broadcast.slug = markdownEmail.getData().getSlug(); + broadcast.sendToTag = markdownEmail.getData().getSendToTag(); + return broadcast; + } + + public static Broadcast fromMarkdown(String markdown) { + // Mock implementation for parsing markdown + MarkdownEmail markdownEmail = MarkdownEmail.fromString(markdown); + return fromMarkdownEmail(markdownEmail); + } + + public long contactCount(DatabaseConnection dbConnection) { + String query = sendToTag.equals("*") ? "SELECT COUNT(*) FROM Contacts" : "SELECT COUNT(*) FROM Contacts WHERE Tag = ?"; + Map params = new HashMap<>(); + if (!sendToTag.equals("*")) { + params.put("Tag", sendToTag); + } + return dbConnection.executeScalar(query, params); + } + + // Getters and setters +} \ No newline at end of file diff --git a/server/Models/import org.junit.jupiter.api.java b/server/Models/import org.junit.jupiter.api.java new file mode 100644 index 0000000..192c2ca --- /dev/null +++ b/server/Models/import org.junit.jupiter.api.java @@ -0,0 +1,72 @@ +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class BroadcastTest { + + @Test + public void broadcastInitialization() { + Broadcast broadcast = new Broadcast(); + assertNotNull(broadcast); + assertEquals("pending", broadcast.getStatus()); + assertEquals("*", broadcast.getSendToTag()); + assertEquals(OffsetDateTime.now(ZoneOffset.UTC).toLocalDate(), broadcast.getCreatedAt().toLocalDate()); + } + + @Test + public void broadcastFromMarkdownEmail() { + MarkdownEmail markdownEmail = new MarkdownEmail(); + EmailData emailData = new EmailData(); + emailData.setSubject("Test Subject"); + emailData.setSlug("test-slug"); + emailData.setSendToTag("test-tag"); + markdownEmail.setData(emailData); + + Broadcast broadcast = Broadcast.fromMarkdownEmail(markdownEmail); + + assertEquals("Test Subject", broadcast.getName()); + assertEquals("test-slug", broadcast.getSlug()); + assertEquals("test-tag", broadcast.getSendToTag()); + } + + @Test + public void broadcastFromMarkdown() { + String markdown = "---\nsubject: Test Subject\nslug: test-slug\nsendToTag: test-tag\n---"; + + Broadcast broadcast = Broadcast.fromMarkdown(markdown); + + assertEquals("Test Subject", broadcast.getName()); + assertEquals("test-slug", broadcast.getSlug()); + assertEquals("test-tag", broadcast.getSendToTag()); + } + + @Test + public void broadcastContactCountWithTag() { + DatabaseConnection mockDbConnection = Mockito.mock(DatabaseConnection.class); + Mockito.when(mockDbConnection.executeScalar(Mockito.anyString(), Mockito.anyMap())) + .thenReturn(10L); + + Broadcast broadcast = new Broadcast(); + broadcast.setSendToTag("test-tag"); + + long count = broadcast.contactCount(mockDbConnection); + + assertEquals(10, count); + } + + @Test + public void broadcastContactCountWithoutTag() { + DatabaseConnection mockDbConnection = Mockito.mock(DatabaseConnection.class); + Mockito.when(mockDbConnection.executeScalar(Mockito.anyString(), Mockito.anyMap())) + .thenReturn(100L); + + Broadcast broadcast = new Broadcast(); + broadcast.setSendToTag("*"); + + long count = broadcast.contactCount(mockDbConnection); \ No newline at end of file diff --git a/server/Models/public class Broadcast {.java b/server/Models/public class Broadcast {.java new file mode 100644 index 0000000..207c056 --- /dev/null +++ b/server/Models/public class Broadcast {.java @@ -0,0 +1,32 @@ +public class Broadcast { + private static final String DEFAULT_STATUS = "pending"; + private static final String DEFAULT_SEND_TO_TAG = "*"; + + private String status; + private String sendToTag; + private OffsetDateTime createdAt; + private String name; + private String slug; + + public Broadcast() { + this.status = DEFAULT_STATUS; + this.sendToTag = DEFAULT_SEND_TO_TAG; + this.createdAt = OffsetDateTime.now(ZoneOffset.UTC); + } + + public static Broadcast fromMarkdownEmail(MarkdownEmail markdownEmail) { + Broadcast broadcast = new Broadcast(); + broadcast.name = markdownEmail.getData().getSubject(); + broadcast.slug = markdownEmail.getData().getSlug(); + broadcast.sendToTag = markdownEmail.getData().getSendToTag(); + return broadcast; + } + + public static Broadcast fromMarkdown(String markdown) { + // Mock implementation for parsing markdown + MarkdownEmail markdownEmail = MarkdownEmail.fromString(markdown); + return fromMarkdownEmail(markdownEmail); + } + + // Getters and setters +} \ No newline at end of file