mirror of https://github.com/usbharu/Hideout.git
test: Mastodon互換APIの通知エンドポイントのページングテストを追加
This commit is contained in:
parent
9deff9fef8
commit
637b2b84d5
|
@ -0,0 +1,113 @@
|
||||||
|
package mastodon.notifications
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.SpringApplication
|
||||||
|
import kotlinx.coroutines.test.runTest
|
||||||
|
import org.flywaydb.core.Flyway
|
||||||
|
import org.junit.jupiter.api.AfterAll
|
||||||
|
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.AutoConfigureMockMvc
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest
|
||||||
|
import org.springframework.security.core.authority.SimpleGrantedAuthority
|
||||||
|
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors
|
||||||
|
import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers
|
||||||
|
import org.springframework.test.context.jdbc.Sql
|
||||||
|
import org.springframework.test.web.servlet.MockMvc
|
||||||
|
import org.springframework.test.web.servlet.get
|
||||||
|
import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder
|
||||||
|
import org.springframework.test.web.servlet.setup.MockMvcBuilders
|
||||||
|
import org.springframework.transaction.annotation.Transactional
|
||||||
|
import org.springframework.web.context.WebApplicationContext
|
||||||
|
|
||||||
|
@SpringBootTest(classes = [SpringApplication::class], properties = ["hideout.use-mongodb=false"])
|
||||||
|
@AutoConfigureMockMvc
|
||||||
|
@Transactional
|
||||||
|
@Sql("/sql/test-user.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
|
||||||
|
@Sql("/sql/test-user2.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
|
||||||
|
@Sql("/sql/notification/test-notifications.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
|
||||||
|
class NotificationsTest {
|
||||||
|
@Autowired
|
||||||
|
private lateinit var context: WebApplicationContext
|
||||||
|
|
||||||
|
private lateinit var mockMvc: MockMvc
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `通知を取得できる`() = runTest {
|
||||||
|
mockMvc
|
||||||
|
.get("/api/v1/notifications") {
|
||||||
|
with(
|
||||||
|
SecurityMockMvcRequestPostProcessors.jwt()
|
||||||
|
.jwt { it.claim("uid", "1") }.authorities(SimpleGrantedAuthority("SCOPE_read"))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
.asyncDispatch()
|
||||||
|
.andExpect {
|
||||||
|
header {
|
||||||
|
string(
|
||||||
|
"Link",
|
||||||
|
"<https://example.com/api/v1/notifications?min_id=65>; rel=\"next\", <https://example.com/api/v1/notifications?max_id=26>; rel=\"prev\""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun maxIdを指定して通知を取得できる() = runTest {
|
||||||
|
mockMvc
|
||||||
|
.get("/api/v1/notifications?max_id=26") {
|
||||||
|
with(
|
||||||
|
SecurityMockMvcRequestPostProcessors.jwt()
|
||||||
|
.jwt { it.claim("uid", "1") }.authorities(SimpleGrantedAuthority("SCOPE_read"))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
.asyncDispatch()
|
||||||
|
.andExpect {
|
||||||
|
header {
|
||||||
|
string(
|
||||||
|
"Link",
|
||||||
|
"<https://example.com/api/v1/notifications?min_id=25>; rel=\"next\", <https://example.com/api/v1/notifications?max_id=1>; rel=\"prev\""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun minIdを指定して通知を取得できる() = runTest {
|
||||||
|
mockMvc
|
||||||
|
.get("/api/v1/notifications?min_id=25") {
|
||||||
|
with(
|
||||||
|
SecurityMockMvcRequestPostProcessors.jwt()
|
||||||
|
.jwt { it.claim("uid", "1") }.authorities(SimpleGrantedAuthority("SCOPE_read"))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
.asyncDispatch()
|
||||||
|
.andExpect {
|
||||||
|
header {
|
||||||
|
string(
|
||||||
|
"Link",
|
||||||
|
"<https://example.com/api/v1/notifications?min_id=65>; rel=\"next\", <https://example.com/api/v1/notifications?max_id=26>; rel=\"prev\""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
fun setUp() {
|
||||||
|
mockMvc = MockMvcBuilders.webAppContextSetup(context)
|
||||||
|
.apply<DefaultMockMvcBuilder>(SecurityMockMvcConfigurers.springSecurity())
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@JvmStatic
|
||||||
|
@AfterAll
|
||||||
|
fun dropDatabase(@Autowired flyway: Flyway) {
|
||||||
|
flyway.clean()
|
||||||
|
flyway.migrate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -65,4 +65,69 @@ VALUES (1, 'follow', 1, 2, null, null, null, current_timestamp),
|
||||||
(64, 'follow', 1, 2, null, null, null, current_timestamp),
|
(64, 'follow', 1, 2, null, null, null, current_timestamp),
|
||||||
(65, 'follow', 1, 2, null, null, null, current_timestamp);
|
(65, 'follow', 1, 2, null, null, null, current_timestamp);
|
||||||
|
|
||||||
-- insert into
|
insert into mastodon_notifications (id, user_id, type, created_at, account_id, status_id, report_id, relationship_serverance_event_id)
|
||||||
|
values (1, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(2, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(3, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(4, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(5, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(6, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(7, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(8, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(9, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(10, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(11, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(12, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(13, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(14, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(15, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(16, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(17, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(18, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(19, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(20, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(21, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(22, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(23, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(24, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(25, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(26, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(27, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(28, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(29, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(30, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(31, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(32, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(33, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(34, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(35, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(36, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(37, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(38, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(39, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(40, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(41, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(42, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(43, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(44, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(45, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(46, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(47, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(48, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(49, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(50, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(51, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(52, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(53, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(54, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(55, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(56, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(57, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(58, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(59, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(60, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(61, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(62, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(63, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(64, 1, 'follow', current_timestamp, 2, null, null, null),
|
||||||
|
(65, 1, 'follow', current_timestamp, 2, null, null, null);
|
Loading…
Reference in New Issue