wip: currently rewriting the project as a full stack application tangled.org/kacaii.dev/sigo
gleam
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

:white_check_mark: add tests for resolving and reopening occurrences

Kacaii 1cb4db19 99cf2b99

+115
+115
test/occurence_test.gleam
··· 11 11 import gleam/http 12 12 import gleam/json 13 13 import gleam/list 14 + import gleam/option 14 15 import gleam/set 15 16 import wisp 16 17 import wisp/simulate ··· 282 283 // 󰃢 CLEANUP ---------------------------------------------------------------- 283 284 let assert Ok(_) = dev_sql.soft_truncate_user_account(ctx.db) 284 285 } 286 + 287 + pub fn resolve_occurrence_test() { 288 + let ctx = app_test.global_data() 289 + let base_path = "/occurrence/resolved_at/" 290 + use _ <- list.each(list.range(1, app_test.n_tests)) 291 + 292 + // DUMMY --------------------------------------------------------------------- 293 + let dummy_applicant = dummy.random_user(ctx.db) 294 + let dummy_members = 295 + list.map(list.range(1, 10), fn(_) { dummy.random_user(ctx.db) }) 296 + 297 + let dummy_brigade = 298 + dummy.random_brigade(ctx.db, dummy_applicant, dummy_members) 299 + 300 + let dummy_occurrence = 301 + dummy.random_occurrence( 302 + conn: ctx.db, 303 + applicant_id: dummy_applicant, 304 + assign: [dummy_brigade], 305 + ) 306 + 307 + let path = base_path <> uuid.to_string(dummy_occurrence) 308 + let req = simulate.request(http.Post, path) 309 + let resp = http_router.handle_request(req, ctx) 310 + 311 + assert resp.status == 401 as "Restricted to authenticated Users" 312 + let req = app_test.with_authorization(req) 313 + let resp = http_router.handle_request(req, ctx) 314 + let body = simulate.read_body(resp) 315 + 316 + let assert Ok(_) = 317 + json.parse(body, { 318 + let uuid_decoder = { 319 + use maybe_uuid <- decode.then(decode.string) 320 + case uuid.from_string(maybe_uuid) { 321 + Error(_) -> decode.failure(uuid.v7(), "occurrence_uuid") 322 + Ok(value) -> decode.success(value) 323 + } 324 + } 325 + 326 + let resolved_at_decoder = decode.optional(decode.float) 327 + 328 + use occ_id <- decode.field("id", uuid_decoder) 329 + use resolved_at <- decode.field("resolved_at", resolved_at_decoder) 330 + use _ <- decode.field("updated_at", decode.float) 331 + 332 + assert option.is_some(resolved_at) as "Occurrence should be closed" 333 + assert occ_id == dummy_occurrence as "Update the correct occurrence" 334 + decode.success(Nil) 335 + }) 336 + 337 + // 󰃢 CLEANUP ---------------------------------------------------------------- 338 + let assert Ok(_) = dev_sql.truncate_occurrence(ctx.db) 339 + let assert Ok(_) = dev_sql.truncate_brigade(ctx.db) 340 + let assert Ok(_) = dev_sql.soft_truncate_user_account(ctx.db) 341 + } 342 + 343 + pub fn reopen_occurrence_test() { 344 + let ctx = app_test.global_data() 345 + let base_path = "/occurrence/resolved_at/" 346 + use _ <- list.each(list.range(1, app_test.n_tests)) 347 + 348 + // DUMMY --------------------------------------------------------------------- 349 + let dummy_applicant = dummy.random_user(ctx.db) 350 + let dummy_members = 351 + list.map(list.range(1, 10), fn(_) { dummy.random_user(ctx.db) }) 352 + 353 + let dummy_brigade = 354 + dummy.random_brigade(ctx.db, dummy_applicant, dummy_members) 355 + 356 + let dummy_occurrence = 357 + dummy.random_occurrence( 358 + conn: ctx.db, 359 + applicant_id: dummy_applicant, 360 + assign: [dummy_brigade], 361 + ) 362 + 363 + let path = base_path <> uuid.to_string(dummy_occurrence) 364 + let req = simulate.request(http.Delete, path) 365 + let resp = http_router.handle_request(req, ctx) 366 + 367 + assert resp.status == 401 as "Restricted to authenticated Users" 368 + let req = app_test.with_authorization(req) 369 + let resp = http_router.handle_request(req, ctx) 370 + let body = simulate.read_body(resp) 371 + 372 + let assert Ok(_) = 373 + json.parse(body, { 374 + let uuid_decoder = { 375 + use maybe_uuid <- decode.then(decode.string) 376 + case uuid.from_string(maybe_uuid) { 377 + Error(_) -> decode.failure(uuid.v7(), "occurrence_uuid") 378 + Ok(value) -> decode.success(value) 379 + } 380 + } 381 + 382 + let resolved_at_decoder = decode.optional(decode.float) 383 + 384 + // PARSE 385 + use occ_id <- decode.field("id", uuid_decoder) 386 + use resolved_at <- decode.field("resolved_at", resolved_at_decoder) 387 + use _ <- decode.field("updated_at", decode.float) 388 + 389 + // ASSERT 390 + assert option.is_none(resolved_at) as "Occurrence should be open" 391 + assert occ_id == dummy_occurrence as "Update the correct occurrence" 392 + decode.success(Nil) 393 + }) 394 + 395 + // 󰃢 CLEANUP ---------------------------------------------------------------- 396 + let assert Ok(_) = dev_sql.truncate_occurrence(ctx.db) 397 + let assert Ok(_) = dev_sql.truncate_brigade(ctx.db) 398 + let assert Ok(_) = dev_sql.soft_truncate_user_account(ctx.db) 399 + }