Merge pull request 'API 1.2.5 Diet Preference, DietUserPreference' (#19) from tibor into master

Reviewed-on: https://git.workouttest.org/bossanyit/aitrainer_server/pulls/19
This commit is contained in:
bossanyit 2023-04-22 13:34:33 +00:00
commit f61603d1ac
23 changed files with 122 additions and 296 deletions

View File

@ -11,7 +11,7 @@ plugins {
}
group = "com.aitrainer"
version = "1.2.4"
version = "1.2.5"
java.sourceCompatibility = JavaVersion.VERSION_17
repositories {
@ -26,7 +26,7 @@ dependencies {
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
implementation("org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.6.8")
implementation(dependencyNotation = "org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.6.8")
implementation("org.springframework.security.oauth:spring-security-oauth2:2.5.2.RELEASE")
implementation("javax.validation:validation-api:2.0.1.Final")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
@ -38,7 +38,7 @@ dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.4.1")
implementation("io.jsonwebtoken:jjwt:0.9.1")
implementation("org.yaml:snakeyaml:1.33")
implementation("org.yaml:snakeyaml:2.0")
implementation("com.google.code.gson:gson:2.10.1")
implementation("org.json:json:20220924")

24
data/db/update_1_2_5.sql Normal file
View File

@ -0,0 +1,24 @@
START TRANSACTION;
DROP TABLE `diet_user_sensitivity`;
DROP TABLE `diet_sensitivity`;
CREATE TABLE `diet_preference` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`type` CHAR(50) NULL DEFAULT NULL COLLATE 'utf8_hungarian_ci',
`preference` CHAR(100) NOT NULL DEFAULT '' COLLATE 'utf8_hungarian_ci',
PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8_hungarian_ci'
ENGINE=InnoDB
;
ALTER TABLE `diet_user_preference`
CHANGE COLUMN `raw_material_id` `diet_preference_id` INT(11) NULL DEFAULT '0' AFTER `diet_user_id`,
ADD COLUMN `preference` CHAR(100) NULL DEFAULT NULL AFTER `diet_preference_id`,
ADD COLUMN `preference_type` CHAR(50) NULL DEFAULT NULL AFTER `preference`,
DROP COLUMN `temperature`;
UPDATE configuration set config_value = "1.2.5", date_change=CURRENT_DATE WHERE config_key = "db_version";
COMMIT;

View File

@ -14,21 +14,20 @@ import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("/api")
class CustomerPackageController( private val customerRepository: CustomerRepository,
private val customerExerciseDeviceRepository: CustomerExerciseDeviceRepository,
private val exercisesRepository: ExercisesRepository,
private val purchaseRepository: PurchaseRepository,
private val customerPropertyRepository: CustomerPropertyRepository,
private val exerciseResultRepository: ExerciseResultRepository,
private val customerActivityRepository: CustomerActivityRepository,
private val customerTrainingPlanRepository: CustomerTrainingPlanRepository,
private val customerMembership: CustomerMembershipRepository,
private val dietRepository: DietRepository,
private val dietUserConsumptionRepository: DietUserConsumptionRepository,
private val dietUserRepository: DietUserRepository,
private val dietUserPreferenceRepository: DietUserPreferenceRepository,
private val dietUserSensitivityRepository: DietUserSensitivityRepository,
private val customerConversationRepository: CustomerConversationRepository
class CustomerPackageController(private val customerRepository: CustomerRepository,
private val customerExerciseDeviceRepository: CustomerExerciseDeviceRepository,
private val exercisesRepository: ExercisesRepository,
private val purchaseRepository: PurchaseRepository,
private val customerPropertyRepository: CustomerPropertyRepository,
private val exerciseResultRepository: ExerciseResultRepository,
private val customerActivityRepository: CustomerActivityRepository,
private val customerTrainingPlanRepository: CustomerTrainingPlanRepository,
private val customerMembership: CustomerMembershipRepository,
private val dietRepository: DietRepository,
private val dietUserConsumptionRepository: DietUserConsumptionRepository,
private val dietUserRepository: DietUserRepository,
private val dietUserPreferenceRepository: DietUserPreferenceRepository,
private val customerConversationRepository: CustomerConversationRepository
) {
@ -62,9 +61,6 @@ class CustomerPackageController( private val customerRepository: CustomerReposit
val listDietUserPreference = dietUserPreferenceRepository.findByDietUserId(dietUserId)
val listDietUserPreferenceJson = gson.toJson(listDietUserPreference)
val listDietUserSensitivity = dietUserSensitivityRepository.findByDietUserId(dietUserId)
val listDietUserSensitivityJson = gson.toJson(listDietUserSensitivity)
val listCustomerConversation = customerConversationRepository.findByCustomerId(customerId)
val listCustomerConversationJson = gson.toJson(listCustomerConversation)
@ -74,7 +70,6 @@ class CustomerPackageController( private val customerRepository: CustomerReposit
"|||" + getClassRecord(Diet::class.simpleName, listDietJson) +
"|||" + getClassRecord(DietUserConsumption::class.simpleName, listDietUserConsumptionJson) +
"|||" + getClassRecord(DietUserPreference::class.simpleName, listDietUserPreferenceJson) +
"|||" + getClassRecord(DietUserSensitivity::class.simpleName, listDietUserSensitivityJson) +
"|||" + getClassRecord(CustomerConversation::class.simpleName, listCustomerConversationJson)
return if (packageJson.isEmpty()) ResponseEntity.notFound().build() else

View File

@ -1,7 +1,7 @@
package com.aitrainer.api.controller
import com.aitrainer.api.model.*
import com.aitrainer.api.model.diet.DietSensitivity
import com.aitrainer.api.model.diet.DietPreference
import com.aitrainer.api.model.diet.Meal
import com.aitrainer.api.model.diet.Recipe
import com.aitrainer.api.model.diet.Store
@ -38,7 +38,7 @@ class PackageController(private val exerciseAbilityRepository: ExerciseAbilityRe
private val storeRepository: StoreRepository,
private val recipeRepository: RecipeRepository,
private val mealRepository: MealRepository,
private val dietSensitivityRepository: DietSensitivityRepository
private val dietPreferenceRepository: DietPreferenceRepository
) {
@GetMapping("/diet_package", produces = [MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8"])
@ -63,7 +63,7 @@ class PackageController(private val exerciseAbilityRepository: ExerciseAbilityRe
val listRawMaterial = mealRepository.findAll()
val listRawMaterialJson = gson.toJson(listRawMaterial)
val listDietSensitivity = dietSensitivityRepository.findAll()
val listDietSensitivity = dietPreferenceRepository.findAll()
val listDietSensitivityJson = gson.toJson(listDietSensitivity)
val listAppText = appTextRepository.findAllWithTranslation()
@ -75,7 +75,7 @@ class PackageController(private val exerciseAbilityRepository: ExerciseAbilityRe
"|||" + getClassRecord(Store::class.simpleName, listStoreJson) +
"|||" + getClassRecord(Recipe::class.simpleName, listRecipeJson) +
"|||" + getClassRecord(Meal::class.simpleName, listRawMaterialJson) +
"|||" + getClassRecord(DietSensitivity::class.simpleName, listDietSensitivityJson) +
"|||" + getClassRecord(DietPreference::class.simpleName, listDietSensitivityJson) +
"|||" + getClassRecord(AppText::class.simpleName, listAppTextJson)
return if (packageJson.isEmpty()) ResponseEntity.notFound().build() else

View File

@ -1,24 +0,0 @@
package com.aitrainer.api.controller.diet
import com.aitrainer.api.model.diet.DietSensitivity
import com.aitrainer.api.repository.diet.DietSensitivityRepository
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
@RestController
@RequestMapping("api")
class DietSensitivityController(private val dietSensitivityRepository: DietSensitivityRepository) {
@PostMapping ("/diet_sensitivity")
fun insert(@RequestBody dietSensitivity: DietSensitivity): ResponseEntity<DietSensitivity> {
val newDietSensitivity = dietSensitivityRepository.save(dietSensitivity)
return ResponseEntity.ok().body(newDietSensitivity)
}
@GetMapping("/diet_sensitivity")
fun getAll(): ResponseEntity<List<DietSensitivity>> {
val list = dietSensitivityRepository.findAll()
return if (list.isEmpty()) ResponseEntity.notFound().build() else
ResponseEntity.ok().body(list)
}
}

View File

@ -22,4 +22,16 @@ class DietUserPreferenceController(private val dietUserPreferenceRepository: Die
return if (list.isEmpty()) ResponseEntity.notFound().build() else
ResponseEntity.ok().body(list)
}
@GetMapping("/diet_user_preference/preference/{dietPreferenceId}")
fun getByDietPreferenceIdId(@PathVariable dietPreferenceId: Long): ResponseEntity<List<DietUserPreference>> {
val list = dietUserPreferenceRepository.findByDietPreferenceId(dietPreferenceId)
return if (list.isEmpty()) ResponseEntity.notFound().build() else
ResponseEntity.ok().body(list)
}
@PostMapping("/diet_user_preference/delete", produces = [MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8"])
fun delete(@RequestBody dietUserPreference: DietUserPreference): ResponseEntity<*> {
return ResponseEntity.ok().body(dietUserPreferenceRepository.delete(dietUserPreference))
}
}

View File

@ -1,25 +0,0 @@
package com.aitrainer.api.controller.diet
import com.aitrainer.api.model.diet.DietUserSensitivity
import com.aitrainer.api.repository.diet.DietUserSensitivityRepository
import org.springframework.http.MediaType
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
import java.util.*
@RestController
@RequestMapping("/api")
class DietUserSensitivityController(private val dietUserSensitivityRepository: DietUserSensitivityRepository) {
@PostMapping("/diet_user_sensitivity", produces = [MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8"])
fun insert(@RequestBody dietUserSensitivity: DietUserSensitivity): ResponseEntity<*> {
return ResponseEntity.ok().body(dietUserSensitivityRepository.save(dietUserSensitivity))
}
@GetMapping("/diet_user_sensitivity/{dietUserId}")
fun getByDietUserId(@PathVariable dietUserId: Long): ResponseEntity<List<DietUserSensitivity>> {
val list = dietUserSensitivityRepository.findByDietUserId(dietUserId)
return if (list.isEmpty()) ResponseEntity.notFound().build() else
ResponseEntity.ok().body(list)
}
}

View File

@ -8,7 +8,8 @@ import jakarta.persistence.Id
import javax.validation.constraints.NotNull
@Entity
data class DietSensitivity(
data class DietPreference(
@Expose @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long = 0,
@Expose @get: NotNull val name: String = "",
@Expose @get: NotNull val type: String = "",
@Expose @get: NotNull val preference: String = "",
)

View File

@ -11,6 +11,7 @@ import javax.validation.constraints.NotNull
data class DietUserPreference(
@Expose @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long = 0,
@Expose @get: NotNull val dietUserId: Long = 0,
@Expose @get: NotNull val rawMaterialId: Long = 0,
@Expose @get: NotNull val temperature: Byte = 0,
@Expose @get: NotNull val dietPreferenceId: Long = 0,
@Expose @get: NotNull val preference: String = "",
@Expose @get: NotNull val preferenceType: String = "",
)

View File

@ -1,15 +0,0 @@
package com.aitrainer.api.model.diet
import com.google.gson.annotations.Expose
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import javax.validation.constraints.NotNull
@Entity
data class DietUserSensitivity(
@Expose @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long = 0,
@Expose @get: NotNull val dietUserId: Long = 0,
@Expose @get: NotNull val sensitivityId: Long = 0,
)

View File

@ -0,0 +1,6 @@
package com.aitrainer.api.repository.diet
import com.aitrainer.api.model.diet.DietPreference
import org.springframework.data.jpa.repository.JpaRepository
interface DietPreferenceRepository : JpaRepository<DietPreference, Int>

View File

@ -1,6 +0,0 @@
package com.aitrainer.api.repository.diet
import com.aitrainer.api.model.diet.DietSensitivity
import org.springframework.data.jpa.repository.JpaRepository
interface DietSensitivityRepository : JpaRepository<DietSensitivity, Int>

View File

@ -7,4 +7,6 @@ import org.springframework.stereotype.Repository
@Repository
interface DietUserPreferenceRepository : JpaRepository<DietUserPreference, Long> {
fun findByDietUserId(dietUserId: Long): List<DietUserPreference>
fun findByDietPreferenceId(dietPreferenceId: Long): List<DietUserPreference>
}

View File

@ -1,10 +0,0 @@
package com.aitrainer.api.repository.diet
import com.aitrainer.api.model.diet.DietUserSensitivity
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository
@Repository
interface DietUserSensitivityRepository : JpaRepository<DietUserSensitivity, Long> {
fun findByDietUserId(dietUserId: Long): List<DietUserSensitivity>
}

View File

@ -16,7 +16,7 @@ logging.config=classpath:logback-spring.xml
logging.file=logs
# if the database structure has been changed, increment this version number
application.version=1.2.4
application.version=1.2.5
jwt.secret=aitrainer

View File

@ -14,7 +14,7 @@ logging.config=classpath:logback-spring.xml
logging.file=logs
# if the database structue has been changed, increment this version number
application.version=1.2.4
application.version=1.2.5
jwt.secret=aitrainer

View File

@ -14,7 +14,7 @@ logging.config=classpath:logback-spring.xml
logging.file=logs
# if the database structue has been changed, increment this version number
application.version=1.2.4
application.version=1.2.5
jwt.secret=aitrainer

View File

@ -17,7 +17,7 @@ logging.config=classpath:logback-spring.xml
logging.file=logs
# if the database structure has been changed, increment this version number
application.version=1.2.4
application.version=1.2.5
jwt.secret=aitrainer

View File

@ -59,9 +59,6 @@ class AppCustomerPackageTest {
@Autowired
private lateinit var dietUserPreferenceRepository: DietUserPreferenceRepository
@Autowired
private lateinit var dietUserSensitivityRepository: DietUserSensitivityRepository
@Autowired
private lateinit var customerConversationRepository: CustomerConversationRepository
@ -83,7 +80,6 @@ class AppCustomerPackageTest {
dietUserConsumptionRepository,
dietUserRepository,
dietUserPreferenceRepository,
dietUserSensitivityRepository,
customerConversationRepository
)
@ -130,15 +126,8 @@ class AppCustomerPackageTest {
val type = object : TypeToken<List<DietUserPreference?>?>() {}.type
val list: List<DietUserPreference> = gson.fromJson(dietUserPreferenceJson, type)
assertEquals(list[0].dietUserId, 2)
assertEquals(list[0].temperature, -1)
}
record[0] == DietUserSensitivity::class.simpleName -> {
val dietUserSensitivityJson: String = record[1]
val type = object : TypeToken<List<DietUserSensitivity?>?>() {}.type
val list: List<DietUserSensitivity> = gson.fromJson(dietUserSensitivityJson, type)
assertEquals(list[0].dietUserId, 2)
assertEquals(list[0].sensitivityId, 1)
assertEquals(list[0].dietPreferenceId, 10)
assertEquals(list[1].preference, "Cukorbetegség")
}
}
}
@ -162,7 +151,6 @@ class AppCustomerPackageTest {
dietUserConsumptionRepository,
dietUserRepository,
dietUserPreferenceRepository,
dietUserSensitivityRepository,
customerConversationRepository
)
@ -217,7 +205,6 @@ class AppCustomerPackageTest {
dietUserConsumptionRepository,
dietUserRepository,
dietUserPreferenceRepository,
dietUserSensitivityRepository,
customerConversationRepository)
var response: ResponseEntity<*> = controller.getCustomerPackageData(91)

View File

@ -2,7 +2,7 @@ package com.aitrainer.api.test
import com.aitrainer.api.controller.PackageController
import com.aitrainer.api.model.*
import com.aitrainer.api.model.diet.DietSensitivity
import com.aitrainer.api.model.diet.DietPreference
import com.aitrainer.api.model.diet.Meal
import com.aitrainer.api.model.diet.Recipe
import com.aitrainer.api.model.diet.Store
@ -62,7 +62,7 @@ class AppPackageTest {
private lateinit var membershipRepository: MembershipRepository
@Autowired
private lateinit var dietSensitivityRepository: DietSensitivityRepository
private lateinit var dietPreferenceRepository: DietPreferenceRepository
@Autowired
private lateinit var mealRepository: MealRepository
@ -101,7 +101,7 @@ class AppPackageTest {
storeRepository,
recipeRepository,
mealRepository,
dietSensitivityRepository,
dietPreferenceRepository,
)
val response: ResponseEntity<*> = controller.getDietPackageData()
@ -149,13 +149,13 @@ class AppPackageTest {
assertEquals(list[0].calMin, 70.0)
assertEquals(list[0].proteinMax, 25.0)
assertEquals(list[1].name, "Tigris buci1")
} else if ( record[0] == DietSensitivity::class.simpleName) {
val dietSensitivityJson: String = record[1]
val type = object : TypeToken<List<DietSensitivity?>?>() {}.type
val list: List<DietSensitivity> = gson.fromJson(dietSensitivityJson, type)
} else if ( record[0] == DietPreference::class.simpleName) {
val dietPreferenceJson: String = record[1]
val type = object : TypeToken<List<DietPreference?>?>() {}.type
val list: List<DietPreference> = gson.fromJson(dietPreferenceJson, type)
assertTrue(list.isNotEmpty())
assertEquals(list[0].name, "Nut Allergy")
assertEquals(list[1].name, "Penicillin sensitivity")
assertEquals(list[0].preference, "Nut Allergy")
assertEquals(list[1].preference, "Penicillin sensitivity")
} else if ( record[0] == AppText::class.simpleName) {
val appTextJson: String = record[1]
val type = object : TypeToken<List<AppText?>?>() {}.type
@ -199,7 +199,7 @@ class AppPackageTest {
storeRepository,
recipeRepository,
mealRepository,
dietSensitivityRepository,
dietPreferenceRepository,
)
val response: ResponseEntity<*> = controller.getClubPackageData()
@ -259,7 +259,7 @@ class AppPackageTest {
storeRepository,
recipeRepository,
mealRepository,
dietSensitivityRepository,
dietPreferenceRepository,
)
val response: ResponseEntity<*> = controller.getPackageData()

View File

@ -1,70 +0,0 @@
package com.aitrainer.api.test.diet
import com.aitrainer.api.model.diet.DietSensitivity
import com.aitrainer.api.test.Tokenizer
import com.google.gson.Gson
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
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.get
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.*
@SpringBootTest
@AutoConfigureMockMvc
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class DietSensitivityTest {
@Autowired
lateinit var mockMvc: MockMvc
private var authToken: String? = ""
@BeforeAll
fun initTest() {
authToken = Tokenizer.getToken()
}
private val dietSensitivity = DietSensitivity(1, name = "Nut Allergy")
private val dietSensitivity2 = DietSensitivity(2, name = "Penicillin sensitivity")
@Test
fun `insert diet sensitivity successfully`() {
val gson = Gson()
mockMvc.perform(
post("/api/diet_sensitivity")
.contentType(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer $authToken")
.content(gson.toJson(dietSensitivity))
)
.andExpect(status().isOk)
.andExpect(jsonPath("$.name").value("Nut Allergy"))
mockMvc.perform(
post("/api/diet_sensitivity")
.contentType(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer $authToken")
.content(gson.toJson(dietSensitivity2))
)
.andExpect(status().isOk)
}
@Test
fun `get all diet sensitivity successfully`() {
mockMvc.perform(get("/api/diet_sensitivity")
.header("Authorization", "Bearer $authToken")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk)
.andExpect(jsonPath("$.[0].name").value("Nut Allergy"))
.andExpect(jsonPath("$.[1].name").value("Penicillin sensitivity"))
}
}

View File

@ -28,17 +28,16 @@ class DietUserPreferenceTest {
private lateinit var mockMvc: MockMvc
private val dietUserPreference = DietUserPreference(
id = 1,
rawMaterialId = 10,
dietPreferenceId = 10,
dietUserId = 5,
temperature = -1
preference = ""
)
private val dietUserPreference2 = DietUserPreference(
id = 2,
rawMaterialId = 11,
dietPreferenceId = 0,
dietUserId = 5,
temperature = 1
preference = "Cukorbetegség",
preferenceType = "betegség"
)
private var authToken: String = ""
@ -60,8 +59,9 @@ class DietUserPreferenceTest {
)
.andExpect(status().isOk)
.andExpect(jsonPath("$.dietUserId").value(5))
.andExpect(jsonPath("$.rawMaterialId").value(10))
.andExpect(jsonPath("$.temperature").value(-1))
.andExpect(jsonPath("$.dietPreferenceId").value(10))
.andExpect(jsonPath("$.preference").value(""))
.andExpect(jsonPath("$.preferenceType").value(""))
mockMvc.perform(
MockMvcRequestBuilders.post("/api/diet_user_preference")
@ -70,20 +70,37 @@ class DietUserPreferenceTest {
.content(toJson(dietUserPreference2))
)
.andExpect(status().isOk)
}
@Test
fun `get dietUserPreference list by dietUserId id successfully`() {
// Act & Assert
mockMvc.perform(get("/api/diet_user_preference/{dietUserId}", 5)
.header("Authorization", "Bearer $authToken")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk)
.andExpect(jsonPath("$.[0].temperature").value(-1))
.andExpect(jsonPath("$.[0].rawMaterialId").value(10))
.andExpect(jsonPath("$.[1].temperature").value(1))
.andExpect(jsonPath("$.[1].rawMaterialId").value(11))
.andExpect(jsonPath("$.[0].dietPreferenceId").value(10))
.andExpect(jsonPath("$.[0].preference").value(""))
.andExpect(jsonPath("$.[1].preference").value("Cukorbetegség"))
val dietUserPreference3 = DietUserPreference(
dietPreferenceId = 0,
dietUserId = 5,
preference = "Ebéd-Vacsora egyben",
preferenceType = "egyéb"
)
mockMvc.perform(
MockMvcRequestBuilders.post("/api/diet_user_preference")
.contentType(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer $authToken")
.content(toJson(dietUserPreference3))
)
.andExpect(status().isOk)
mockMvc.perform(
MockMvcRequestBuilders.post("/api/diet_user_preference/delete")
.contentType(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer $authToken")
.content(toJson(dietUserPreference3))
)
.andExpect(status().isOk)
}

View File

@ -1,69 +0,0 @@
package com.aitrainer.api.test.diet
import com.aitrainer.api.model.diet.DietUserSensitivity
import com.aitrainer.api.test.Tokenizer
import com.google.gson.Gson
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.extension.ExtendWith
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.context.junit.jupiter.SpringExtension
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.*
@ExtendWith(SpringExtension::class)
@SpringBootTest
@AutoConfigureMockMvc
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class DietUserSensitivityTest {
@Autowired
private lateinit var mockMvc: MockMvc
private val dietUserSensitivity = DietUserSensitivity(
sensitivityId = 1,
dietUserId = 5,
)
private var authToken: String = ""
@BeforeAll
fun initTest() {
authToken = Tokenizer.getToken()
}
@Test
fun `insert dietUserSensitivity successfully`() {
mockMvc.perform(
MockMvcRequestBuilders.post("/api/diet_user_sensitivity")
.contentType(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer $authToken")
.content(toJson(dietUserSensitivity))
)
.andExpect(status().isOk)
.andExpect(jsonPath("$.dietUserId").value(5))
.andExpect(jsonPath("$.sensitivityId").value(1))
// Act & Assert
mockMvc.perform(get("/api/diet_user_sensitivity/{dietUserId}", 5)
.header("Authorization", "Bearer $authToken")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk)
.andExpect(jsonPath("$.[0].dietUserId").value(5))
.andExpect(jsonPath("$.[0].sensitivityId").value(1))
}
private fun toJson(obj: Any): String {
return Gson().toJson(obj)
}
}