generate site using llm prompt
This commit is contained in:
@@ -1,201 +0,0 @@
|
||||
package com.indie.controller;
|
||||
|
||||
import com.indie.config.GlobalExceptionHandler;
|
||||
import com.indie.config.JwtAuthenticationToken;
|
||||
import com.indie.config.UserPrincipal;
|
||||
import com.indie.dto.PageRequest;
|
||||
import com.indie.model.Page;
|
||||
import com.indie.model.Site;
|
||||
import com.indie.model.SiteStatus;
|
||||
import com.indie.repository.PageRepository;
|
||||
import com.indie.repository.SiteRepository;
|
||||
import com.indie.support.TestSecurityConfig;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.authentication;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
|
||||
|
||||
@WebMvcTest(PageController.class)
|
||||
@Import({GlobalExceptionHandler.class, TestSecurityConfig.class})
|
||||
class PageControllerTest {
|
||||
|
||||
private final MockMvc mockMvc;
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
@MockBean
|
||||
private PageRepository pageRepository;
|
||||
|
||||
@MockBean
|
||||
private SiteRepository siteRepository;
|
||||
|
||||
private UUID userId;
|
||||
|
||||
PageControllerTest(@Autowired MockMvc mockMvc, @Autowired ObjectMapper objectMapper) {
|
||||
this.mockMvc = mockMvc;
|
||||
this.objectMapper = objectMapper;
|
||||
}
|
||||
private UUID siteId;
|
||||
private UserPrincipal principal;
|
||||
private JwtAuthenticationToken auth;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
userId = UUID.randomUUID();
|
||||
siteId = UUID.randomUUID();
|
||||
principal = new UserPrincipal(userId, "user@test.com", "Test User");
|
||||
auth = new JwtAuthenticationToken(principal, "test-token");
|
||||
}
|
||||
|
||||
@Test
|
||||
void listPagesReturns200() throws Exception {
|
||||
Site site = Site.builder().id(siteId).userId(userId).name("Site").build();
|
||||
when(siteRepository.findById(siteId)).thenReturn(Optional.of(site));
|
||||
|
||||
Page page = Page.builder()
|
||||
.id(UUID.randomUUID())
|
||||
.siteId(siteId)
|
||||
.title("Home")
|
||||
.slug("home")
|
||||
.orderIndex(0)
|
||||
.build();
|
||||
when(pageRepository.findBySiteIdOrderByOrderIndexAsc(siteId))
|
||||
.thenReturn(List.of(page));
|
||||
|
||||
mockMvc.perform(get("/api/sites/{siteId}/pages", siteId)
|
||||
.with(authentication(auth)))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$[0].title").value("Home"))
|
||||
.andExpect(jsonPath("$[0].slug").value("home"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void createPageReturns201() throws Exception {
|
||||
Site site = Site.builder().id(siteId).userId(userId).name("Site").build();
|
||||
when(siteRepository.findById(siteId)).thenReturn(Optional.of(site));
|
||||
when(pageRepository.existsBySiteIdAndSlug(siteId, "about")).thenReturn(false);
|
||||
|
||||
Page saved = Page.builder()
|
||||
.id(UUID.randomUUID())
|
||||
.siteId(siteId)
|
||||
.title("About")
|
||||
.slug("about")
|
||||
.orderIndex(1)
|
||||
.createdAt(LocalDateTime.now())
|
||||
.build();
|
||||
when(pageRepository.save(any(Page.class))).thenReturn(saved);
|
||||
|
||||
PageRequest request = new PageRequest();
|
||||
request.setTitle("About");
|
||||
request.setSlug("about");
|
||||
request.setOrderIndex(1);
|
||||
|
||||
mockMvc.perform(post("/api/sites/{siteId}/pages", siteId)
|
||||
.with(authentication(auth))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(request)))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(jsonPath("$.title").value("About"))
|
||||
.andExpect(jsonPath("$.slug").value("about"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void createPageReturns400OnDuplicateSlug() throws Exception {
|
||||
Site site = Site.builder().id(siteId).userId(userId).name("Site").build();
|
||||
when(siteRepository.findById(siteId)).thenReturn(Optional.of(site));
|
||||
when(pageRepository.existsBySiteIdAndSlug(siteId, "home")).thenReturn(true);
|
||||
|
||||
PageRequest request = new PageRequest();
|
||||
request.setTitle("Home");
|
||||
request.setSlug("home");
|
||||
request.setOrderIndex(0);
|
||||
|
||||
mockMvc.perform(post("/api/sites/{siteId}/pages", siteId)
|
||||
.with(authentication(auth))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(request)))
|
||||
.andExpect(status().isBadRequest())
|
||||
.andExpect(jsonPath("$.detail").value("A page with this slug already exists"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void deletePageReturns204() throws Exception {
|
||||
Site site = Site.builder().id(siteId).userId(userId).name("Site").build();
|
||||
when(siteRepository.findById(siteId)).thenReturn(Optional.of(site));
|
||||
|
||||
UUID pageId = UUID.randomUUID();
|
||||
Page page = Page.builder()
|
||||
.id(pageId)
|
||||
.siteId(siteId)
|
||||
.title("To Delete")
|
||||
.slug("to-delete")
|
||||
.orderIndex(0)
|
||||
.build();
|
||||
when(pageRepository.findById(pageId)).thenReturn(Optional.of(page));
|
||||
|
||||
mockMvc.perform(delete("/api/sites/{siteId}/pages/{pageId}", siteId, pageId)
|
||||
.with(authentication(auth)))
|
||||
.andExpect(status().isNoContent());
|
||||
}
|
||||
|
||||
@Test
|
||||
void updatePageReturns200() throws Exception {
|
||||
Site site = Site.builder().id(siteId).userId(userId).name("Site").build();
|
||||
when(siteRepository.findById(siteId)).thenReturn(Optional.of(site));
|
||||
|
||||
UUID pageId = UUID.randomUUID();
|
||||
Page existing = Page.builder()
|
||||
.id(pageId)
|
||||
.siteId(siteId)
|
||||
.title("Old Title")
|
||||
.slug("old-slug")
|
||||
.orderIndex(0)
|
||||
.build();
|
||||
when(pageRepository.findById(pageId)).thenReturn(Optional.of(existing));
|
||||
when(pageRepository.existsBySiteIdAndSlug(siteId, "new-slug")).thenReturn(false);
|
||||
when(pageRepository.save(any(Page.class))).thenAnswer(invocation -> invocation.getArgument(0));
|
||||
|
||||
PageRequest request = new PageRequest();
|
||||
request.setTitle("New Title");
|
||||
request.setSlug("new-slug");
|
||||
request.setOrderIndex(1);
|
||||
|
||||
mockMvc.perform(put("/api/sites/{siteId}/pages/{pageId}", siteId, pageId)
|
||||
.with(authentication(auth))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(request)))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.title").value("New Title"))
|
||||
.andExpect(jsonPath("$.slug").value("new-slug"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void listPagesReturns400OnWrongSiteOwner() throws Exception {
|
||||
Site site = Site.builder()
|
||||
.id(siteId)
|
||||
.userId(UUID.randomUUID())
|
||||
.name("Not Mine")
|
||||
.build();
|
||||
when(siteRepository.findById(siteId)).thenReturn(Optional.of(site));
|
||||
|
||||
mockMvc.perform(get("/api/sites/{siteId}/pages", siteId)
|
||||
.with(authentication(auth)))
|
||||
.andExpect(status().isBadRequest())
|
||||
.andExpect(jsonPath("$.detail").value("Site not found"));
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
package com.indie.dto;
|
||||
|
||||
import com.indie.model.Page;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PageResponseTest {
|
||||
|
||||
@Test
|
||||
void fromMapsAllFields() {
|
||||
UUID id = UUID.randomUUID();
|
||||
UUID siteId = UUID.randomUUID();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
||||
Page page = Page.builder()
|
||||
.id(id)
|
||||
.siteId(siteId)
|
||||
.title("About")
|
||||
.slug("about")
|
||||
.seoTitle("About Us")
|
||||
.seoDescription("Learn about us")
|
||||
.orderIndex(1)
|
||||
.createdAt(now)
|
||||
.build();
|
||||
|
||||
PageResponse response = PageResponse.from(page);
|
||||
|
||||
assertEquals(id, response.getId());
|
||||
assertEquals(siteId, response.getSiteId());
|
||||
assertEquals("About", response.getTitle());
|
||||
assertEquals("about", response.getSlug());
|
||||
assertEquals("About Us", response.getSeoTitle());
|
||||
assertEquals("Learn about us", response.getSeoDescription());
|
||||
assertEquals(1, response.getOrderIndex());
|
||||
assertEquals(now, response.getCreatedAt());
|
||||
}
|
||||
|
||||
@Test
|
||||
void fromHandlesNullOptionalFields() {
|
||||
Page page = Page.builder()
|
||||
.id(UUID.randomUUID())
|
||||
.siteId(UUID.randomUUID())
|
||||
.title("Home")
|
||||
.slug("home")
|
||||
.orderIndex(0)
|
||||
.build();
|
||||
|
||||
PageResponse response = PageResponse.from(page);
|
||||
|
||||
assertNull(response.getSeoTitle());
|
||||
assertNull(response.getSeoDescription());
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,6 @@ import com.indie.model.SiteStatus;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
@@ -17,7 +16,6 @@ class SiteResponseTest {
|
||||
UUID id = UUID.randomUUID();
|
||||
UUID userId = UUID.randomUUID();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
Map<String, Object> theme = Map.of("primaryColor", "#000");
|
||||
|
||||
Site site = Site.builder()
|
||||
.id(id)
|
||||
@@ -25,7 +23,6 @@ class SiteResponseTest {
|
||||
.name("My Site")
|
||||
.description("A test site")
|
||||
.subdomain("mysite")
|
||||
.themeConfig(theme)
|
||||
.status(SiteStatus.PUBLISHED)
|
||||
.publishedAt(now)
|
||||
.createdAt(now)
|
||||
@@ -39,7 +36,6 @@ class SiteResponseTest {
|
||||
assertEquals("My Site", response.getName());
|
||||
assertEquals("A test site", response.getDescription());
|
||||
assertEquals("mysite", response.getSubdomain());
|
||||
assertEquals(theme, response.getThemeConfig());
|
||||
assertEquals(SiteStatus.PUBLISHED, response.getStatus());
|
||||
assertEquals(now, response.getPublishedAt());
|
||||
assertEquals(now, response.getCreatedAt());
|
||||
@@ -59,7 +55,6 @@ class SiteResponseTest {
|
||||
|
||||
assertNull(response.getDescription());
|
||||
assertNull(response.getSubdomain());
|
||||
assertNull(response.getThemeConfig());
|
||||
assertNull(response.getPublishedAt());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
package com.indie.model;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class ComponentTest {
|
||||
|
||||
@Test
|
||||
void prePersistSetsId() {
|
||||
Component component = new Component();
|
||||
component.setPageId(UUID.randomUUID());
|
||||
component.setType(ComponentType.HEADING);
|
||||
component.setOrderIndex(0);
|
||||
|
||||
assertNull(component.getId());
|
||||
|
||||
component.onCreate();
|
||||
|
||||
assertNotNull(component.getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
void prePersistDoesNotOverrideExistingId() {
|
||||
UUID existingId = UUID.randomUUID();
|
||||
Component component = Component.builder()
|
||||
.id(existingId)
|
||||
.pageId(UUID.randomUUID())
|
||||
.type(ComponentType.TEXT)
|
||||
.orderIndex(0)
|
||||
.build();
|
||||
|
||||
component.onCreate();
|
||||
|
||||
assertEquals(existingId, component.getId());
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
package com.indie.model;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PageTest {
|
||||
|
||||
@Test
|
||||
void prePersistSetsIdAndCreatedAt() {
|
||||
Page page = new Page();
|
||||
page.setSiteId(UUID.randomUUID());
|
||||
page.setTitle("Home");
|
||||
page.setSlug("home");
|
||||
page.setOrderIndex(0);
|
||||
|
||||
assertNull(page.getId());
|
||||
assertNull(page.getCreatedAt());
|
||||
|
||||
page.onCreate();
|
||||
|
||||
assertNotNull(page.getId());
|
||||
assertNotNull(page.getCreatedAt());
|
||||
}
|
||||
|
||||
@Test
|
||||
void prePersistDoesNotOverrideExistingId() {
|
||||
UUID existingId = UUID.randomUUID();
|
||||
Page page = Page.builder()
|
||||
.id(existingId)
|
||||
.siteId(UUID.randomUUID())
|
||||
.title("Home")
|
||||
.slug("home")
|
||||
.orderIndex(0)
|
||||
.build();
|
||||
|
||||
page.onCreate();
|
||||
|
||||
assertEquals(existingId, page.getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
void noUpdatedAtField() {
|
||||
Page page = Page.builder()
|
||||
.siteId(UUID.randomUUID())
|
||||
.title("Home")
|
||||
.slug("home")
|
||||
.orderIndex(0)
|
||||
.build();
|
||||
page.onCreate();
|
||||
|
||||
assertNotNull(page.getCreatedAt());
|
||||
}
|
||||
}
|
||||
@@ -1,92 +0,0 @@
|
||||
package com.indie.repository;
|
||||
|
||||
import com.indie.model.Component;
|
||||
import com.indie.model.ComponentType;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
@DataJpaTest
|
||||
class ComponentRepositoryTest {
|
||||
|
||||
private final ComponentRepository componentRepository;
|
||||
|
||||
ComponentRepositoryTest(@Autowired ComponentRepository componentRepository) {
|
||||
this.componentRepository = componentRepository;
|
||||
}
|
||||
|
||||
@Test
|
||||
void saveAndFindById() {
|
||||
Component component = Component.builder()
|
||||
.pageId(UUID.randomUUID())
|
||||
.type(ComponentType.HEADING)
|
||||
.orderIndex(0)
|
||||
.build();
|
||||
|
||||
Component saved = componentRepository.save(component);
|
||||
|
||||
assertNotNull(saved.getId());
|
||||
|
||||
var found = componentRepository.findById(saved.getId());
|
||||
assertTrue(found.isPresent());
|
||||
assertEquals(ComponentType.HEADING, found.get().getType());
|
||||
}
|
||||
|
||||
@Test
|
||||
void findByPageIdOrderByOrderIndexAsc() {
|
||||
UUID pageId = UUID.randomUUID();
|
||||
|
||||
Component c1 = Component.builder().pageId(pageId).type(ComponentType.TEXT).orderIndex(1).build();
|
||||
Component c2 = Component.builder().pageId(pageId).type(ComponentType.HEADING).orderIndex(0).build();
|
||||
componentRepository.save(c1);
|
||||
componentRepository.save(c2);
|
||||
|
||||
List<Component> components = componentRepository.findByPageIdOrderByOrderIndexAsc(pageId);
|
||||
|
||||
assertEquals(2, components.size());
|
||||
assertEquals(ComponentType.HEADING, components.get(0).getType());
|
||||
assertEquals(ComponentType.TEXT, components.get(1).getType());
|
||||
}
|
||||
|
||||
@Test
|
||||
void findByPageIdReturnsEmptyForUnknownPage() {
|
||||
List<Component> components = componentRepository.findByPageIdOrderByOrderIndexAsc(UUID.randomUUID());
|
||||
assertTrue(components.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void deleteByPageId() {
|
||||
UUID pageId = UUID.randomUUID();
|
||||
|
||||
Component c1 = Component.builder().pageId(pageId).type(ComponentType.BUTTON).orderIndex(0).build();
|
||||
Component c2 = Component.builder().pageId(pageId).type(ComponentType.TEXT).orderIndex(1).build();
|
||||
componentRepository.save(c1);
|
||||
componentRepository.save(c2);
|
||||
|
||||
componentRepository.deleteByPageId(pageId);
|
||||
|
||||
List<Component> remaining = componentRepository.findByPageIdOrderByOrderIndexAsc(pageId);
|
||||
assertTrue(remaining.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void deleteByPageIdOnlyDeletesForGivenPage() {
|
||||
UUID pageId1 = UUID.randomUUID();
|
||||
UUID pageId2 = UUID.randomUUID();
|
||||
|
||||
Component c1 = Component.builder().pageId(pageId1).type(ComponentType.GALLERY).orderIndex(0).build();
|
||||
Component c2 = Component.builder().pageId(pageId2).type(ComponentType.IMAGE).orderIndex(0).build();
|
||||
componentRepository.save(c1);
|
||||
componentRepository.save(c2);
|
||||
|
||||
componentRepository.deleteByPageId(pageId1);
|
||||
|
||||
assertEquals(1, componentRepository.findByPageIdOrderByOrderIndexAsc(pageId2).size());
|
||||
assertEquals(0, componentRepository.findByPageIdOrderByOrderIndexAsc(pageId1).size());
|
||||
}
|
||||
}
|
||||
@@ -1,101 +0,0 @@
|
||||
package com.indie.repository;
|
||||
|
||||
import com.indie.model.Page;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
@DataJpaTest
|
||||
class PageRepositoryTest {
|
||||
|
||||
private final PageRepository pageRepository;
|
||||
|
||||
PageRepositoryTest(@Autowired PageRepository pageRepository) {
|
||||
this.pageRepository = pageRepository;
|
||||
}
|
||||
|
||||
@Test
|
||||
void saveAndFindById() {
|
||||
Page page = Page.builder()
|
||||
.siteId(UUID.randomUUID())
|
||||
.title("Home")
|
||||
.slug("home")
|
||||
.orderIndex(0)
|
||||
.build();
|
||||
|
||||
Page saved = pageRepository.save(page);
|
||||
|
||||
assertNotNull(saved.getId());
|
||||
|
||||
Optional<Page> found = pageRepository.findById(saved.getId());
|
||||
assertTrue(found.isPresent());
|
||||
assertEquals("Home", found.get().getTitle());
|
||||
}
|
||||
|
||||
@Test
|
||||
void findBySiteIdOrderByOrderIndexAsc() {
|
||||
UUID siteId = UUID.randomUUID();
|
||||
|
||||
Page page1 = Page.builder().siteId(siteId).title("About").slug("about").orderIndex(1).build();
|
||||
Page page2 = Page.builder().siteId(siteId).title("Home").slug("home").orderIndex(0).build();
|
||||
pageRepository.save(page1);
|
||||
pageRepository.save(page2);
|
||||
|
||||
List<Page> pages = pageRepository.findBySiteIdOrderByOrderIndexAsc(siteId);
|
||||
|
||||
assertEquals(2, pages.size());
|
||||
assertEquals("home", pages.get(0).getSlug());
|
||||
assertEquals("about", pages.get(1).getSlug());
|
||||
}
|
||||
|
||||
@Test
|
||||
void findBySiteIdReturnsEmptyForUnknownSite() {
|
||||
List<Page> pages = pageRepository.findBySiteIdOrderByOrderIndexAsc(UUID.randomUUID());
|
||||
assertTrue(pages.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void findBySiteIdAndSlug() {
|
||||
UUID siteId = UUID.randomUUID();
|
||||
Page page = Page.builder()
|
||||
.siteId(siteId)
|
||||
.title("Contact")
|
||||
.slug("contact")
|
||||
.orderIndex(2)
|
||||
.build();
|
||||
pageRepository.save(page);
|
||||
|
||||
Optional<Page> found = pageRepository.findBySiteIdAndSlug(siteId, "contact");
|
||||
assertTrue(found.isPresent());
|
||||
assertEquals("Contact", found.get().getTitle());
|
||||
}
|
||||
|
||||
@Test
|
||||
void findBySiteIdAndSlugReturnsEmptyWhenNotMatching() {
|
||||
Optional<Page> found = pageRepository.findBySiteIdAndSlug(UUID.randomUUID(), "nonexistent");
|
||||
assertTrue(found.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void existsBySiteIdAndSlug() {
|
||||
UUID siteId = UUID.randomUUID();
|
||||
Page page = Page.builder()
|
||||
.siteId(siteId)
|
||||
.title("Blog")
|
||||
.slug("blog")
|
||||
.orderIndex(0)
|
||||
.build();
|
||||
pageRepository.save(page);
|
||||
|
||||
assertTrue(pageRepository.existsBySiteIdAndSlug(siteId, "blog"));
|
||||
assertFalse(pageRepository.existsBySiteIdAndSlug(siteId, "nonexistent"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package com.indie.support;
|
||||
|
||||
import com.indie.model.Component;
|
||||
import com.indie.repository.ComponentRepository;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class FakeComponentRepository extends InMemoryRepository<Component, UUID> implements ComponentRepository {
|
||||
|
||||
@Override
|
||||
protected UUID getId(Component entity) {
|
||||
return entity.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Component setId(Component entity, UUID id) {
|
||||
entity.setId(id);
|
||||
return entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected UUID generateId() {
|
||||
return UUID.randomUUID();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Component> findByPageIdOrderByOrderIndexAsc(UUID pageId) {
|
||||
return store.values().stream()
|
||||
.filter(c -> c.getPageId().equals(pageId))
|
||||
.sorted(Comparator.comparingInt(Component::getOrderIndex))
|
||||
.toList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByPageId(UUID pageId) {
|
||||
store.values().removeIf(c -> c.getPageId().equals(pageId));
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
package com.indie.support;
|
||||
|
||||
import com.indie.model.Page;
|
||||
import com.indie.repository.PageRepository;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
public class FakePageRepository extends InMemoryRepository<Page, UUID> implements PageRepository {
|
||||
|
||||
@Override
|
||||
protected UUID getId(Page entity) {
|
||||
return entity.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Page setId(Page entity, UUID id) {
|
||||
entity.setId(id);
|
||||
return entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected UUID generateId() {
|
||||
return UUID.randomUUID();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Page> findBySiteIdOrderByOrderIndexAsc(UUID siteId) {
|
||||
return store.values().stream()
|
||||
.filter(p -> p.getSiteId().equals(siteId))
|
||||
.sorted(Comparator.comparingInt(Page::getOrderIndex))
|
||||
.toList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Page> findBySiteIdAndSlug(UUID siteId, String slug) {
|
||||
return store.values().stream()
|
||||
.filter(p -> p.getSiteId().equals(siteId) && p.getSlug().equals(slug))
|
||||
.findFirst();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean existsBySiteIdAndSlug(UUID siteId, String slug) {
|
||||
return store.values().stream()
|
||||
.anyMatch(p -> p.getSiteId().equals(siteId) && p.getSlug().equals(slug));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user