Skip to content

Commit a5e9fdd

Browse files
committed
UserSession Helper
1 parent 3d1f2ef commit a5e9fdd

File tree

5 files changed

+95
-37
lines changed

5 files changed

+95
-37
lines changed

build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ dependencies {
3838
implementation("com.google.code.gson:gson:2.8.6")
3939
implementation("org.jsoup:jsoup:1.13.1")
4040
implementation("com.vladmihalcea:hibernate-types-52:2.9.12")
41-
implementation("com.github.h0tk3y.betterParse:better-parse:0.4.0")
41+
implementation("com.github.h0tk3y.betterParse:better-parse:0.4.2")
4242
implementation("org.tomlj:tomlj:1.0.0")
4343
implementation("com.google.apis:google-api-services-oauth2:v2-rev20200213-1.30.10")
4444
implementation("org.bouncycastle:bcprov-jdk15on:1.66")

src/test/kotlin/com/watcourses/wat_courses/EventTests.kt

+7-11
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.watcourses.wat_courses.persistence.DbEventRepo
66
import com.watcourses.wat_courses.persistence.DbUserRepo
77
import com.watcourses.wat_courses.proto.EventRequest
88
import com.watcourses.wat_courses.proto.RegisterRequest
9+
import com.watcourses.wat_courses.utils.UserSessionFactory
910
import org.assertj.core.api.Assertions.assertThat
1011
import org.junit.jupiter.api.Test
1112
import org.springframework.beans.factory.annotation.Autowired
@@ -32,22 +33,17 @@ class EventTests {
3233
@Autowired
3334
private lateinit var dbUserRepo: DbUserRepo
3435

35-
private fun requestFromResponse(resp: MockHttpServletResponse): MockHttpServletRequest {
36-
val req = MockHttpServletRequest()
37-
req.setCookies(*resp.cookies)
38-
return req
39-
}
36+
@Autowired
37+
private lateinit var userSessionFactory: UserSessionFactory
38+
4039

4140
@Test
4241
fun `logged in user has user id as identifier`() {
43-
val resp = MockHttpServletResponse()
44-
userApi.register(
45-
RegisterRequest(firstName = "first", lastName = "last", email = "[email protected]", password = "1"), resp
46-
)
42+
val user = userSessionFactory.register()
4743
val identifier = dbUserRepo.findAll().single()!!.id.toString()
4844

49-
eventApi.event(EventRequest(type = "type", subject = "ECE 123", data = "123"), requestFromResponse(resp))
50-
eventApi.event(EventRequest(type = "type2", subject = "ECE 124", data = "124"), requestFromResponse(resp))
45+
user.event(EventRequest(type = "type", subject = "ECE 123", data = "123"))
46+
user.event(EventRequest(type = "type2", subject = "ECE 124", data = "124"))
5147

5248
val events = dbEventRepo.findAll()
5349
assertThat(events).hasSize(2)

src/test/kotlin/com/watcourses/wat_courses/UserTests.kt

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.watcourses.wat_courses
33
import com.watcourses.wat_courses.api.UserApi
44
import com.watcourses.wat_courses.proto.LoginRequest
55
import com.watcourses.wat_courses.proto.RegisterRequest
6+
import com.watcourses.wat_courses.utils.UserSessionFactory
67
import org.assertj.core.api.Assertions.assertThat
78
import org.junit.jupiter.api.Test
89
import org.springframework.beans.factory.annotation.Autowired

src/test/kotlin/com/watcourses/wat_courses/api/StudentProfileApiTests.kt

+26-25
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,22 @@ import com.watcourses.wat_courses.proto.CreateStudentProfileRequest
99
import com.watcourses.wat_courses.proto.Schedule
1010
import com.watcourses.wat_courses.proto.StudentProfile
1111
import com.watcourses.wat_courses.proto.Term
12+
import com.watcourses.wat_courses.utils.UserSessionFactory
1213
import org.assertj.core.api.Assertions.assertThat
1314
import org.assertj.core.api.Assertions.assertThatThrownBy
15+
import org.junit.jupiter.api.BeforeEach
1416
import org.junit.jupiter.api.Test
17+
import org.mockito.BDDMockito
1518
import org.springframework.beans.factory.annotation.Autowired
1619
import org.springframework.boot.test.context.SpringBootTest
20+
import org.springframework.core.io.support.PathMatchingResourcePatternResolver
1721
import org.springframework.test.context.ActiveProfiles
1822
import javax.transaction.Transactional
1923

2024
@Transactional
2125
@SpringBootTest
2226
@ActiveProfiles("test")
2327
class StudentProfileApiTests {
24-
@Autowired
25-
private lateinit var studentProfileApi: StudentProfileApi
26-
2728
@Autowired
2829
private lateinit var dbStudentProfileRepo: DbStudentProfileRepo
2930

@@ -33,11 +34,19 @@ class StudentProfileApiTests {
3334
@Autowired
3435
private lateinit var utils: Utils
3536

37+
@Autowired
38+
private lateinit var userSessionFactory: UserSessionFactory
39+
40+
@BeforeEach
41+
fun setup() {
42+
utils.createCourse(*SAMPLE_PROFILE.allCourseCodes().toTypedArray())
43+
}
44+
3645
@Test
37-
fun `create student profile`() {
38-
utils.createCourses(SAMPLE_PROFILE.allCourseCodes())
39-
val studentProfile = studentProfileApi.createStudentProfile(
40-
CreateStudentProfileRequest(
46+
fun `guest create student profile`() {
47+
val guest = userSessionFactory.guest()
48+
val studentProfile = guest.createDefaultStudentProfile(
49+
CreateDefaultStudentProfileRequest(
4150
degrees = listOf("Software Engineering"),
4251
startingYear = 2019,
4352
coopStream = CoopStream.STREAM_8,
@@ -48,37 +57,29 @@ class StudentProfileApiTests {
4857
}
4958

5059
@Test
51-
fun `create default student profile`() {
52-
utils.createCourses(SAMPLE_PROFILE.allCourseCodes())
60+
fun `registered user can create default student profile`() {
5361
val ownerEmail = "[email protected]"
54-
utils.createUserWithEmail(ownerEmail)
55-
val profileWithOwnerEmail = SAMPLE_PROFILE.copy(ownerEmail = ownerEmail)
56-
val studentProfile = studentProfileApi.createDefaultStudentProfile(
62+
val user = userSessionFactory.register(email = ownerEmail)
63+
val studentProfile = user.createDefaultStudentProfile(
5764
CreateDefaultStudentProfileRequest(
5865
degrees = listOf("Software Engineering"),
5966
startingYear = 2019,
60-
coopStream = CoopStream.STREAM_8,
61-
ownerEmail = ownerEmail,
67+
coopStream = CoopStream.STREAM_8
6268
)
6369
)
70+
71+
val profileWithOwnerEmail = SAMPLE_PROFILE.copy(ownerEmail = ownerEmail)
6472
assertThat(studentProfile).isEqualTo(profileWithOwnerEmail)
6573
assertThat(dbStudentProfileRepo.findAll().single()!!.toProto()).isEqualTo(profileWithOwnerEmail)
6674
assertThat(dbUserRepo.findByEmail(ownerEmail)!!.studentProfile!!.toProto()).isEqualTo(profileWithOwnerEmail)
6775
}
6876

6977
@Test
7078
fun `create or update student profile`() {
71-
utils.createCourses(SAMPLE_PROFILE.allCourseCodes())
72-
assertThatThrownBy { studentProfileApi.createOrUpdateStudentProfile(SAMPLE_PROFILE) }
73-
.hasMessageContaining("No owner provided")
74-
7579
val ownerEmail = "[email protected]"
7680
val profileWithOwnerEmail = SAMPLE_PROFILE.copy(ownerEmail = ownerEmail)
77-
assertThatThrownBy { studentProfileApi.createOrUpdateStudentProfile(profileWithOwnerEmail) }
78-
.hasMessageContaining("User with email $ownerEmail is not found")
79-
80-
utils.createUserWithEmail(ownerEmail)
81-
var studentProfile = studentProfileApi.createOrUpdateStudentProfile(profileWithOwnerEmail)
81+
val user = userSessionFactory.register(email = ownerEmail)
82+
var studentProfile = user.createOrUpdateStudentProfile(profileWithOwnerEmail)
8283
assertThat(studentProfile).isEqualTo(profileWithOwnerEmail)
8384
assertThat(dbStudentProfileRepo.findAll().single()!!.toProto()).isEqualTo(profileWithOwnerEmail)
8485
assertThat(dbUserRepo.findByEmail(ownerEmail)!!.studentProfile!!.toProto()).isEqualTo(profileWithOwnerEmail)
@@ -120,8 +121,8 @@ class StudentProfileApiTests {
120121
degrees = listOf("Bug Engineering"),
121122
shortList = listOf("CS 2077", "SCI 238"),
122123
)
123-
utils.createCourses(updatedProfile.allCourseCodes())
124-
studentProfile = studentProfileApi.createOrUpdateStudentProfile(updatedProfile)
124+
utils.createCourse(*updatedProfile.allCourseCodes().toTypedArray())
125+
studentProfile = user.createOrUpdateStudentProfile(updatedProfile)
125126
assertThat(studentProfile).isEqualTo(updatedProfile)
126127
assertThat(dbStudentProfileRepo.findAll().single()!!.toProto()).isEqualTo(updatedProfile)
127128
assertThat(dbUserRepo.findByEmail(ownerEmail)!!.studentProfile!!.toProto()).isEqualTo(updatedProfile)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.watcourses.wat_courses.utils
2+
3+
import com.watcourses.wat_courses.api.EventApi
4+
import com.watcourses.wat_courses.api.StudentProfileApi
5+
import com.watcourses.wat_courses.api.UserApi
6+
import com.watcourses.wat_courses.proto.*
7+
import org.springframework.mock.web.MockHttpServletRequest
8+
import org.springframework.mock.web.MockHttpServletResponse
9+
import org.springframework.stereotype.Component
10+
import javax.servlet.http.Cookie
11+
12+
class UserSession(
13+
private val userApi: UserApi,
14+
private val eventApi: EventApi,
15+
private val studentProfileApi: StudentProfileApi,
16+
private val cookies: Array<Cookie>
17+
) {
18+
private val httpRequest: MockHttpServletRequest
19+
get() {
20+
val req = MockHttpServletRequest()
21+
req.setCookies(*cookies)
22+
return req
23+
}
24+
25+
fun logout() = userApi.logout(httpRequest)
26+
27+
fun event(e: EventRequest) = eventApi.event(e, httpRequest)
28+
29+
fun createDefaultStudentProfile(request: CreateDefaultStudentProfileRequest) =
30+
studentProfileApi.createDefaultStudentProfile(request, httpRequest)
31+
32+
fun createOrUpdateStudentProfile(request: StudentProfile) =
33+
studentProfileApi.createOrUpdateStudentProfile(request, httpRequest)
34+
}
35+
36+
@Component
37+
class UserSessionFactory(
38+
private val userApi: UserApi,
39+
private val eventApi: EventApi,
40+
private val studentProfileApi: StudentProfileApi,
41+
) {
42+
fun register(
43+
firstName: String = "John",
44+
lastName: String = "Doe",
45+
email: String = "[email protected]",
46+
password: String = "default"
47+
): UserSession {
48+
val resp = MockHttpServletResponse()
49+
userApi.register(RegisterRequest(firstName, lastName, email, password), resp)
50+
return UserSession(userApi, eventApi, studentProfileApi, resp.cookies)
51+
}
52+
53+
fun login(name: String, password: String = "default"): UserSession {
54+
val resp = MockHttpServletResponse()
55+
userApi.login(LoginRequest(name, password), resp)
56+
return UserSession(userApi, eventApi, studentProfileApi, resp.cookies)
57+
}
58+
59+
fun guest(): UserSession = UserSession(userApi, eventApi, studentProfileApi, emptyArray())
60+
}

0 commit comments

Comments
 (0)