diff --git a/backend/src/main/kotlin/com/condado/newsletter/dto/EntityTaskDtos.kt b/backend/src/main/kotlin/com/condado/newsletter/dto/EntityTaskDtos.kt index 3829827..91b7654 100644 --- a/backend/src/main/kotlin/com/condado/newsletter/dto/EntityTaskDtos.kt +++ b/backend/src/main/kotlin/com/condado/newsletter/dto/EntityTaskDtos.kt @@ -9,7 +9,7 @@ import java.util.UUID data class EntityTaskCreateDto( @field:NotNull val entityId: UUID, @field:NotBlank val name: String, - @field:NotBlank val prompt: String, + val prompt: String, @field:NotBlank val scheduleCron: String, @field:NotBlank val emailLookback: String ) diff --git a/backend/src/test/kotlin/com/condado/newsletter/controller/EntityTaskControllerTest.kt b/backend/src/test/kotlin/com/condado/newsletter/controller/EntityTaskControllerTest.kt new file mode 100644 index 0000000..ad731e7 --- /dev/null +++ b/backend/src/test/kotlin/com/condado/newsletter/controller/EntityTaskControllerTest.kt @@ -0,0 +1,74 @@ +package com.condado.newsletter.controller + +import com.condado.newsletter.model.VirtualEntity +import com.condado.newsletter.repository.EntityTaskRepository +import com.condado.newsletter.repository.GeneratedMessageHistoryRepository +import com.condado.newsletter.repository.VirtualEntityRepository +import com.condado.newsletter.scheduler.EntityScheduler +import com.condado.newsletter.service.JwtService +import com.ninjasquad.springmockk.MockkBean +import jakarta.servlet.http.Cookie +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.http.MediaType +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post +import org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath +import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status + +@SpringBootTest +@AutoConfigureMockMvc +class EntityTaskControllerTest { + + @Autowired lateinit var mockMvc: MockMvc + @Autowired lateinit var jwtService: JwtService + @Autowired lateinit var virtualEntityRepository: VirtualEntityRepository + @Autowired lateinit var entityTaskRepository: EntityTaskRepository + @Autowired lateinit var generatedMessageHistoryRepository: GeneratedMessageHistoryRepository + + @MockkBean lateinit var entityScheduler: EntityScheduler + + private fun authCookie() = Cookie("jwt", jwtService.generateToken()) + + @AfterEach + fun cleanUp() { + generatedMessageHistoryRepository.deleteAll() + entityTaskRepository.deleteAll() + virtualEntityRepository.deleteAll() + } + + @Test + fun should_createTask_when_promptIsBlankInCreateRequest() { + val entity = virtualEntityRepository.save( + VirtualEntity( + name = "Entity A", + email = "entity-a@condado.com", + jobTitle = "Ops" + ) + ) + + val payload = """ + { + "entityId": "${entity.id}", + "name": "Morning Blast", + "prompt": "", + "scheduleCron": "0 8 * * 1-5", + "emailLookback": "last_week" + } + """.trimIndent() + + mockMvc.perform( + post("/api/v1/tasks") + .cookie(authCookie()) + .contentType(MediaType.APPLICATION_JSON) + .content(payload) + ) + .andExpect(status().isCreated) + .andExpect(jsonPath("$.entityId").value(entity.id.toString())) + .andExpect(jsonPath("$.name").value("Morning Blast")) + .andExpect(jsonPath("$.prompt").value("")) + } +} \ No newline at end of file