remove subdomain feature
This commit is contained in:
@@ -66,7 +66,6 @@ class ExportControllerTest {
|
||||
.id(siteId)
|
||||
.userId(userId)
|
||||
.name("My Site")
|
||||
.subdomain("my-site")
|
||||
.status(SiteStatus.DRAFT)
|
||||
.createdAt(LocalDateTime.now())
|
||||
.updatedAt(LocalDateTime.now())
|
||||
@@ -125,17 +124,16 @@ class ExportControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void exportSanitizesFilenameForSiteWithoutSubdomain() throws Exception {
|
||||
Site siteNoSubdomain = Site.builder()
|
||||
void exportSanitizesFilenameWithSpecialCharacters() throws Exception {
|
||||
Site siteWithSpecialName = Site.builder()
|
||||
.id(siteId)
|
||||
.userId(userId)
|
||||
.name("My Cool Site!")
|
||||
.subdomain(null)
|
||||
.status(SiteStatus.DRAFT)
|
||||
.createdAt(LocalDateTime.now())
|
||||
.updatedAt(LocalDateTime.now())
|
||||
.build();
|
||||
when(siteRepository.findById(siteId)).thenReturn(Optional.of(siteNoSubdomain));
|
||||
when(siteRepository.findById(siteId)).thenReturn(Optional.of(siteWithSpecialName));
|
||||
|
||||
GenerationVersion version = GenerationVersion.builder()
|
||||
.id("v1")
|
||||
|
||||
@@ -80,41 +80,22 @@ class SiteControllerTest {
|
||||
.userId(userId)
|
||||
.name("New Site")
|
||||
.description("Description")
|
||||
.subdomain("new-site")
|
||||
.status(SiteStatus.DRAFT)
|
||||
.createdAt(LocalDateTime.now())
|
||||
.updatedAt(LocalDateTime.now())
|
||||
.build();
|
||||
when(siteRepository.existsBySubdomain("new-site")).thenReturn(false);
|
||||
when(siteRepository.save(any(Site.class))).thenReturn(saved);
|
||||
|
||||
SiteRequest request = new SiteRequest();
|
||||
request.setName("New Site");
|
||||
request.setDescription("Description");
|
||||
request.setSubdomain("new-site");
|
||||
|
||||
mockMvc.perform(post("/api/sites")
|
||||
.with(authentication(auth))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(request)))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(jsonPath("$.name").value("New Site"))
|
||||
.andExpect(jsonPath("$.subdomain").value("new-site"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void createSiteReturns400OnDuplicateSubdomain() throws Exception {
|
||||
when(siteRepository.existsBySubdomain("taken")).thenReturn(true);
|
||||
|
||||
SiteRequest request = new SiteRequest();
|
||||
request.setName("Site");
|
||||
request.setSubdomain("taken");
|
||||
|
||||
mockMvc.perform(post("/api/sites")
|
||||
.with(authentication(auth))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(request)))
|
||||
.andExpect(status().isBadRequest());
|
||||
.andExpect(jsonPath("$.name").value("New Site"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -173,23 +154,19 @@ class SiteControllerTest {
|
||||
.id(siteId)
|
||||
.userId(userId)
|
||||
.name("Old Name")
|
||||
.subdomain("old-sub")
|
||||
.status(SiteStatus.DRAFT)
|
||||
.build();
|
||||
when(siteRepository.findById(siteId)).thenReturn(Optional.of(existing));
|
||||
when(siteRepository.existsBySubdomain("new-sub")).thenReturn(false);
|
||||
when(siteRepository.save(any(Site.class))).thenAnswer(invocation -> invocation.getArgument(0));
|
||||
|
||||
SiteRequest request = new SiteRequest();
|
||||
request.setName("New Name");
|
||||
request.setSubdomain("new-sub");
|
||||
|
||||
mockMvc.perform(put("/api/sites/{id}", siteId)
|
||||
.with(authentication(auth))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(request)))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.name").value("New Name"))
|
||||
.andExpect(jsonPath("$.subdomain").value("new-sub"));
|
||||
.andExpect(jsonPath("$.name").value("New Name"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ class SiteResponseTest {
|
||||
.userId(userId)
|
||||
.name("My Site")
|
||||
.description("A test site")
|
||||
.subdomain("mysite")
|
||||
.status(SiteStatus.PUBLISHED)
|
||||
.publishedAt(now)
|
||||
.createdAt(now)
|
||||
@@ -35,7 +34,6 @@ class SiteResponseTest {
|
||||
assertEquals(userId, response.getUserId());
|
||||
assertEquals("My Site", response.getName());
|
||||
assertEquals("A test site", response.getDescription());
|
||||
assertEquals("mysite", response.getSubdomain());
|
||||
assertEquals(SiteStatus.PUBLISHED, response.getStatus());
|
||||
assertEquals(now, response.getPublishedAt());
|
||||
assertEquals(now, response.getCreatedAt());
|
||||
@@ -54,7 +52,6 @@ class SiteResponseTest {
|
||||
SiteResponse response = SiteResponse.from(site);
|
||||
|
||||
assertNull(response.getDescription());
|
||||
assertNull(response.getSubdomain());
|
||||
assertNull(response.getPublishedAt());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,30 +60,4 @@ class SiteRepositoryTest {
|
||||
assertTrue(sites.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void findBySubdomain() {
|
||||
Site site = Site.builder()
|
||||
.userId(UUID.randomUUID())
|
||||
.name("Site")
|
||||
.subdomain("mysubdomain")
|
||||
.build();
|
||||
siteRepository.save(site);
|
||||
|
||||
Optional<Site> found = siteRepository.findBySubdomain("mysubdomain");
|
||||
assertTrue(found.isPresent());
|
||||
assertEquals("Site", found.get().getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
void existsBySubdomain() {
|
||||
Site site = Site.builder()
|
||||
.userId(UUID.randomUUID())
|
||||
.name("Site")
|
||||
.subdomain("exists-sub")
|
||||
.build();
|
||||
siteRepository.save(site);
|
||||
|
||||
assertTrue(siteRepository.existsBySubdomain("exists-sub"));
|
||||
assertFalse(siteRepository.existsBySubdomain("no-sub"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.krrishg.service;
|
||||
|
||||
import com.krrishg.model.SelfHostedConfig;
|
||||
import com.krrishg.model.Site;
|
||||
import com.krrishg.model.SiteStatus;
|
||||
import com.krrishg.support.FakeSelfHostedConfigRepository;
|
||||
@@ -14,8 +15,6 @@ import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class DomainServiceTest {
|
||||
|
||||
private static final String SITE_DOMAIN = "indie.example.com";
|
||||
|
||||
private FakeSiteRepository siteRepository;
|
||||
private FakeSelfHostedConfigRepository selfHostedConfigRepository;
|
||||
private DomainService domainService;
|
||||
@@ -24,34 +23,33 @@ class DomainServiceTest {
|
||||
void setUp() {
|
||||
siteRepository = new FakeSiteRepository();
|
||||
selfHostedConfigRepository = new FakeSelfHostedConfigRepository();
|
||||
domainService = new DomainService(siteRepository, selfHostedConfigRepository, SITE_DOMAIN);
|
||||
domainService = new DomainService(siteRepository, selfHostedConfigRepository);
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveSiteReturnsSiteWhenSubdomainMatches() {
|
||||
void resolveSiteReturnsSiteForSelfHostedDomain() {
|
||||
Site site = Site.builder()
|
||||
.userId(UUID.randomUUID())
|
||||
.name("My Site")
|
||||
.subdomain("mysite")
|
||||
.status(SiteStatus.DRAFT)
|
||||
.build();
|
||||
siteRepository.save(site);
|
||||
|
||||
Optional<Site> result = domainService.resolveSite("mysite.indie.example.com");
|
||||
SelfHostedConfig config = SelfHostedConfig.builder()
|
||||
.siteId(site.getId())
|
||||
.domain("www.example.com")
|
||||
.build();
|
||||
selfHostedConfigRepository.save(config);
|
||||
|
||||
Optional<Site> result = domainService.resolveSite("www.example.com");
|
||||
|
||||
assertTrue(result.isPresent());
|
||||
assertEquals("mysite", result.get().getSubdomain());
|
||||
assertEquals(site.getId(), result.get().getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveSiteReturnsEmptyForUnknownSubdomain() {
|
||||
Optional<Site> result = domainService.resolveSite("unknown.indie.example.com");
|
||||
assertTrue(result.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveSiteReturnsEmptyForNonMatchingHostname() {
|
||||
Optional<Site> result = domainService.resolveSite("example.com");
|
||||
void resolveSiteReturnsEmptyForUnknownHostname() {
|
||||
Optional<Site> result = domainService.resolveSite("unknown.example.com");
|
||||
assertTrue(result.isEmpty());
|
||||
}
|
||||
|
||||
@@ -62,73 +60,8 @@ class DomainServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveSiteReturnsEmptyWhenSubdomainContainsDots() {
|
||||
Site site = Site.builder()
|
||||
.userId(UUID.randomUUID())
|
||||
.name("My Site")
|
||||
.subdomain("mysite")
|
||||
.status(SiteStatus.DRAFT)
|
||||
.build();
|
||||
siteRepository.save(site);
|
||||
|
||||
Optional<Site> result = domainService.resolveSite("mysite.staging.indie.example.com");
|
||||
void resolveSiteReturnsEmptyWhenHostnameIsBlank() {
|
||||
Optional<Site> result = domainService.resolveSite(" ");
|
||||
assertTrue(result.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveSiteIsCaseInsensitiveOnHostname() {
|
||||
Site site = Site.builder()
|
||||
.userId(UUID.randomUUID())
|
||||
.name("My Site")
|
||||
.subdomain("mysite")
|
||||
.status(SiteStatus.DRAFT)
|
||||
.build();
|
||||
siteRepository.save(site);
|
||||
|
||||
Optional<Site> result = domainService.resolveSite("MySite.indie.example.com");
|
||||
assertTrue(result.isPresent());
|
||||
assertEquals("mysite", result.get().getSubdomain());
|
||||
}
|
||||
|
||||
@Test
|
||||
void isSubdomainAvailableReturnsTrueWhenNotTaken() {
|
||||
assertTrue(domainService.isSubdomainAvailable("available"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void isSubdomainAvailableReturnsFalseWhenTaken() {
|
||||
Site site = Site.builder()
|
||||
.userId(UUID.randomUUID())
|
||||
.name("My Site")
|
||||
.subdomain("taken")
|
||||
.status(SiteStatus.DRAFT)
|
||||
.build();
|
||||
siteRepository.save(site);
|
||||
|
||||
assertFalse(domainService.isSubdomainAvailable("taken"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void getSiteUrlReturnsHttpsUrlWithSubdomain() {
|
||||
Site site = Site.builder()
|
||||
.userId(UUID.randomUUID())
|
||||
.name("My Site")
|
||||
.subdomain("mysite")
|
||||
.status(SiteStatus.DRAFT)
|
||||
.build();
|
||||
|
||||
String url = domainService.getSiteUrl(site);
|
||||
assertEquals("https://mysite.indie.example.com", url);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getSiteUrlReturnsNullWhenNoSubdomain() {
|
||||
Site site = Site.builder()
|
||||
.userId(UUID.randomUUID())
|
||||
.name("My Site")
|
||||
.status(SiteStatus.DRAFT)
|
||||
.build();
|
||||
|
||||
assertNull(domainService.getSiteUrl(site));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import com.krrishg.repository.SiteRepository;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
public class FakeSiteRepository extends InMemoryRepository<Site, UUID> implements SiteRepository {
|
||||
@@ -33,17 +32,4 @@ public class FakeSiteRepository extends InMemoryRepository<Site, UUID> implement
|
||||
.sorted(Comparator.comparing(Site::getCreatedAt).reversed())
|
||||
.toList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Site> findBySubdomain(String subdomain) {
|
||||
return store.values().stream()
|
||||
.filter(s -> subdomain.equals(s.getSubdomain()))
|
||||
.findFirst();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean existsBySubdomain(String subdomain) {
|
||||
return store.values().stream()
|
||||
.anyMatch(s -> subdomain.equals(s.getSubdomain()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user