Fix #99549: Remember Previous Status #104217

Merged
Sybren A. Stüvel merged 16 commits from Evelinealy/flamenco:web-api-upgrade into main 2023-06-02 22:50:10 +02:00
Collaborator

Fix #99549: When sending Workers offline, remember their previous status

When the status of a worker goes offline, the Manager will now make the status of the worker to be remembered once it goes back online. So when the Worker makes this status change (so for example X → offline), Manager should immediately set StatusRequested = "X" once it goes online.

Fix #99549: When sending Workers offline, remember their previous status When the status of a worker goes offline, the Manager will now make the status of the worker to be remembered once it goes back online. So when the Worker makes this status change (so for example `X → offline`), Manager should immediately set `StatusRequested = "X" ` once it goes online.
Eveline Anderson added 3 commits 2023-05-26 20:36:32 +02:00
Eveline Anderson added 1 commit 2023-05-26 20:49:56 +02:00
Eveline Anderson added 3 commits 2023-05-29 20:28:10 +02:00

Congrats on your first pull reqeust!

I can confirm that the feature is working, and that the test that tests it is passing as well. If that sentence looks oddly specific, it is ;-)

We've all fallen into this trap; that one test works, but a few of its siblings now need adjustments as well. Before sending in a PR, remember to run make test to run all unit tests.

--- FAIL: TestWorkerSignoffTaskRequeue (0.00s)
    workers.go:196: Unexpected call to *mocks.MockChangeBroadcaster.BroadcastWorkerUpdate([{<nil> e7632d62-c3b8-4af0-9e78-01752928952c <nil> дрон 0xc00052e890 offline 0xc000110e10 0001-01-01 00:00:00 +0000 UTC 3.0}]) at C:/workspace/flamenco/internal/manager/api_impl/workers.go:196 because:
        expected call at C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:242 doesn't match the argument at index 0.
        Got: {<nil> e7632d62-c3b8-4af0-9e78-01752928952c <nil> дрон 0xc00052e890 offline 0xc000110e10 0001-01-01 00:00:00 +0000 UTC 3.0} (api.SocketIOWorkerUpdate)
        Want: is equal to {<nil> e7632d62-c3b8-4af0-9e78-01752928952c <nil> дрон 0xc00052e840 offline <nil> 0001-01-01 00:00:00 +0000 UTC 3.0} (api.SocketIOWorkerUpdate)
    controller.go:269: missing call(s) to *mocks.MockChangeBroadcaster.BroadcastWorkerUpdate(is equal to {<nil> e7632d62-c3b8-4af0-9e78-01752928952c <nil> дрон 0xc00052e840 offline <nil> 0001-01-01 00:00:00 +0000 UTC 3.0} (api.SocketIOWorkerUpdate)) C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:242
    controller.go:269: aborting test due to missing call(s)
--- FAIL: TestWorkerSignoffStatusChangeRequest (0.00s)
    workers.go:176: Unexpected call to *mocks.MockPersistenceService.SaveWorkerStatus([context.Background.WithDeadline(2023-05-31 11:32:51.7760995 +0200 CEST m=+10.184911901 [10s]) 0xc0000e25a0]) at C:/workspace/flamenco/internal/manager/api_impl/workers.go:176 because:
        expected call at C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:280 doesn't match the argument at index 1.
        Got: &{{1 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} {0001-01-01 00:00:00 +0000 UTC false} e7632d62-c3b8-4af0-9e78-01752928952c  дрон fe80::5054:ff:fede:2ad7 linux 3.0 offline 0001-01-01 00:00:00 +0000 UTC awake false blender,ffmpeg,file-management,misc []} (*persistence.Worker)
        Want: is equal to &{{1 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} {0001-01-01 00:00:00 +0000 UTC false} e7632d62-c3b8-4af0-9e78-01752928952c  дрон fe80::5054:ff:fede:2ad7 linux 3.0 offline 0001-01-01 00:00:00 +0000 UTC  false blender,ffmpeg,file-management,misc []} (*persistence.Worker)
    controller.go:269: missing call(s) to *mocks.MockPersistenceService.WorkerSeen(is anything, is equal to &{{1 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} {0001-01-01 00:00:00 
+0000 UTC false} e7632d62-c3b8-4af0-9e78-01752928952c  дрон fe80::5054:ff:fede:2ad7 linux 3.0 offline 0001-01-01 00:00:00 +0000 UTC awake false blender,ffmpeg,file-management,misc []} (*persistence.Worker)) C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:283
    controller.go:269: missing call(s) to *mocks.MockChangeBroadcaster.BroadcastWorkerUpdate(is equal to {<nil> e7632d62-c3b8-4af0-9e78-01752928952c <nil> дрон 0xc000450000 offline <nil> 0001-01-01 00:00:00 +0000 UTC 3.0} (api.SocketIOWorkerUpdate)) C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:267
    controller.go:269: missing call(s) to *mocks.MockPersistenceService.SaveWorkerStatus(is anything, is equal to &{{1 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} {0001-01-01 00:00:00 +0000 UTC false} e7632d62-c3b8-4af0-9e78-01752928952c  дрон fe80::5054:ff:fede:2ad7 linux 3.0 offline 0001-01-01 00:00:00 +0000 UTC  false blender,ffmpeg,file-management,misc []} (*persistence.Worker)) C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:280
    controller.go:269: missing call(s) to *mocks.MockTaskStateMachine.RequeueActiveTasksOfWorker(is anything, is equal to &{{1 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} {0001-01-01 00:00:00 +0000 UTC false} e7632d62-c3b8-4af0-9e78-01752928952c  дрон fe80::5054:ff:fede:2ad7 linux 3.0 offline 0001-01-01 00:00:00 +0000 UTC awake false blender,ffmpeg,file-management,misc []} (*persistence.Worker), is equal to worker signed off (string)) C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:282
    controller.go:269: aborting test due to missing call(s)

Note that a Shaman test might fail, which is tracked separately in #104218 and fixing that is out of scope for this PR.
Update: I've committed a fix.

Congrats on your first pull reqeust! I can confirm that the feature is working, and that the test that tests it is passing as well. If that sentence looks oddly specific, it is ;-) We've all fallen into this trap; that one test works, but a few of its siblings now need adjustments as well. Before sending in a PR, remember to run `make test` to run **all** unit tests. ``` --- FAIL: TestWorkerSignoffTaskRequeue (0.00s) workers.go:196: Unexpected call to *mocks.MockChangeBroadcaster.BroadcastWorkerUpdate([{<nil> e7632d62-c3b8-4af0-9e78-01752928952c <nil> дрон 0xc00052e890 offline 0xc000110e10 0001-01-01 00:00:00 +0000 UTC 3.0}]) at C:/workspace/flamenco/internal/manager/api_impl/workers.go:196 because: expected call at C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:242 doesn't match the argument at index 0. Got: {<nil> e7632d62-c3b8-4af0-9e78-01752928952c <nil> дрон 0xc00052e890 offline 0xc000110e10 0001-01-01 00:00:00 +0000 UTC 3.0} (api.SocketIOWorkerUpdate) Want: is equal to {<nil> e7632d62-c3b8-4af0-9e78-01752928952c <nil> дрон 0xc00052e840 offline <nil> 0001-01-01 00:00:00 +0000 UTC 3.0} (api.SocketIOWorkerUpdate) controller.go:269: missing call(s) to *mocks.MockChangeBroadcaster.BroadcastWorkerUpdate(is equal to {<nil> e7632d62-c3b8-4af0-9e78-01752928952c <nil> дрон 0xc00052e840 offline <nil> 0001-01-01 00:00:00 +0000 UTC 3.0} (api.SocketIOWorkerUpdate)) C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:242 controller.go:269: aborting test due to missing call(s) --- FAIL: TestWorkerSignoffStatusChangeRequest (0.00s) workers.go:176: Unexpected call to *mocks.MockPersistenceService.SaveWorkerStatus([context.Background.WithDeadline(2023-05-31 11:32:51.7760995 +0200 CEST m=+10.184911901 [10s]) 0xc0000e25a0]) at C:/workspace/flamenco/internal/manager/api_impl/workers.go:176 because: expected call at C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:280 doesn't match the argument at index 1. Got: &{{1 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} {0001-01-01 00:00:00 +0000 UTC false} e7632d62-c3b8-4af0-9e78-01752928952c дрон fe80::5054:ff:fede:2ad7 linux 3.0 offline 0001-01-01 00:00:00 +0000 UTC awake false blender,ffmpeg,file-management,misc []} (*persistence.Worker) Want: is equal to &{{1 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} {0001-01-01 00:00:00 +0000 UTC false} e7632d62-c3b8-4af0-9e78-01752928952c дрон fe80::5054:ff:fede:2ad7 linux 3.0 offline 0001-01-01 00:00:00 +0000 UTC false blender,ffmpeg,file-management,misc []} (*persistence.Worker) controller.go:269: missing call(s) to *mocks.MockPersistenceService.WorkerSeen(is anything, is equal to &{{1 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} {0001-01-01 00:00:00 +0000 UTC false} e7632d62-c3b8-4af0-9e78-01752928952c дрон fe80::5054:ff:fede:2ad7 linux 3.0 offline 0001-01-01 00:00:00 +0000 UTC awake false blender,ffmpeg,file-management,misc []} (*persistence.Worker)) C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:283 controller.go:269: missing call(s) to *mocks.MockChangeBroadcaster.BroadcastWorkerUpdate(is equal to {<nil> e7632d62-c3b8-4af0-9e78-01752928952c <nil> дрон 0xc000450000 offline <nil> 0001-01-01 00:00:00 +0000 UTC 3.0} (api.SocketIOWorkerUpdate)) C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:267 controller.go:269: missing call(s) to *mocks.MockPersistenceService.SaveWorkerStatus(is anything, is equal to &{{1 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} {0001-01-01 00:00:00 +0000 UTC false} e7632d62-c3b8-4af0-9e78-01752928952c дрон fe80::5054:ff:fede:2ad7 linux 3.0 offline 0001-01-01 00:00:00 +0000 UTC false blender,ffmpeg,file-management,misc []} (*persistence.Worker)) C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:280 controller.go:269: missing call(s) to *mocks.MockTaskStateMachine.RequeueActiveTasksOfWorker(is anything, is equal to &{{1 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} {0001-01-01 00:00:00 +0000 UTC false} e7632d62-c3b8-4af0-9e78-01752928952c дрон fe80::5054:ff:fede:2ad7 linux 3.0 offline 0001-01-01 00:00:00 +0000 UTC awake false blender,ffmpeg,file-management,misc []} (*persistence.Worker), is equal to worker signed off (string)) C:/workspace/flamenco/internal/manager/api_impl/workers_test.go:282 controller.go:269: aborting test due to missing call(s) ``` ~~Note that a Shaman test might fail, which is tracked separately in #104218 and fixing that is out of scope for this PR.~~ Update: I've committed a fix.
Sybren A. Stüvel requested changes 2023-05-31 12:09:47 +02:00
Sybren A. Stüvel left a comment
Owner

Marking as 'changes requested'

Marking as 'changes requested'
Eveline Anderson added 1 commit 2023-05-31 18:54:04 +02:00
Eveline Anderson added 2 commits 2023-05-31 19:03:54 +02:00
Author
Collaborator

Thank you for the reminder, I'll try to run all the tests and see what I can fix up. Thanks for fixing the Shaman issue!

Thank you for the reminder, I'll try to run all the tests and see what I can fix up. Thanks for fixing the Shaman issue!
Author
Collaborator

Ah, so it's the TestSetSchedule in the sleep_scheduler_test.go file that is not happy. It gives this issue:

=== RUN   TestSetSchedule
    /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler.go:79: Unexpected call to *mocks.MockPersistenceService.SetWorkerSleepSchedule([context.Background aeb49d8a-6903-41b3-b545-77b7a1c0ca19 0xc000118000]) at /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler.go:79 because:
        expected call at /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler_test.go:54 doesn't match the argument at index 2.
        Got: &{{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} 0 0xc00011a000 true mo tu we 09:00 18:00 2022-06-07 09:00:00 -0700 PDT} (*persistence.SleepSchedule)
        Want: is equal to &{{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} 0 0xc00011a000 true mo tu we 09:00 18:00 2022-06-07 18:00:00 +0200 +0200} (*persistence.SleepSchedule)
    /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/controller.go:137: missing call(s) to *mocks.MockPersistenceService.SetWorkerSleepSchedule(is equal to context.Background (*context.emptyCtx), is equal to aeb49d8a-6903-41b3-b545-77b7a1c0ca19 (string), is equal to &{{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} 0 0xc00011a000 true mo tu we 09:00 18:00 2022-06-07 18:00:00 +0200 +0200} (*persistence.SleepSchedule)) /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler_test.go:54
    /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/controller.go:137: missing call(s) to *mocks.MockPersistenceService.SaveWorkerStatus(is equal to context.Background (*context.emptyCtx), is anything) /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler_test.go:58
    /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/controller.go:137: missing call(s) to *mocks.MockChangeBroadcaster.BroadcastWorkerUpdate(is anything) /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler_test.go:59
    /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/controller.go:137: aborting test due to missing call(s)
--- FAIL: TestSetSchedule (0.01s)
FAIL
FAIL    git.blender.org/flamenco/internal/manager/sleep_scheduler       0.012s

I'll retrace the function to see why I'm getting the error in the SetWorkerSleepSchedule function.
Actually, looking at it. It seems to be unhappy with the timezone. It's "getting" 09:00:00 -0700 PDT (which is my timezone), but wants 18:00:00 +0200 +0200. I don't want to exactly "fix" this because I'm not sure if this would mess someone else up. Were there any other errors you were getting besides the SetWorkerSleepSchedule?
I've merged my code so that it's up-to-date with your current fix.

Ah, so it's the TestSetSchedule in the sleep_scheduler_test.go file that is not happy. It gives this issue: ``` === RUN TestSetSchedule /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler.go:79: Unexpected call to *mocks.MockPersistenceService.SetWorkerSleepSchedule([context.Background aeb49d8a-6903-41b3-b545-77b7a1c0ca19 0xc000118000]) at /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler.go:79 because: expected call at /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler_test.go:54 doesn't match the argument at index 2. Got: &{{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} 0 0xc00011a000 true mo tu we 09:00 18:00 2022-06-07 09:00:00 -0700 PDT} (*persistence.SleepSchedule) Want: is equal to &{{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} 0 0xc00011a000 true mo tu we 09:00 18:00 2022-06-07 18:00:00 +0200 +0200} (*persistence.SleepSchedule) /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/controller.go:137: missing call(s) to *mocks.MockPersistenceService.SetWorkerSleepSchedule(is equal to context.Background (*context.emptyCtx), is equal to aeb49d8a-6903-41b3-b545-77b7a1c0ca19 (string), is equal to &{{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} 0 0xc00011a000 true mo tu we 09:00 18:00 2022-06-07 18:00:00 +0200 +0200} (*persistence.SleepSchedule)) /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler_test.go:54 /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/controller.go:137: missing call(s) to *mocks.MockPersistenceService.SaveWorkerStatus(is equal to context.Background (*context.emptyCtx), is anything) /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler_test.go:58 /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/controller.go:137: missing call(s) to *mocks.MockChangeBroadcaster.BroadcastWorkerUpdate(is anything) /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/sleep_scheduler_test.go:59 /home/eveline_dev/Desktop/Blender_Repos/flamenco/internal/manager/sleep_scheduler/controller.go:137: aborting test due to missing call(s) --- FAIL: TestSetSchedule (0.01s) FAIL FAIL git.blender.org/flamenco/internal/manager/sleep_scheduler 0.012s ``` ~~I'll retrace the function to see why I'm getting the error in the `SetWorkerSleepSchedule` function.~~ Actually, looking at it. It seems to be unhappy with the timezone. It's "getting" 09:00:00 -0700 PDT (which is my timezone), but wants 18:00:00 +0200 +0200. I don't want to exactly "fix" this because I'm not sure if this would mess someone else up. Were there any other errors you were getting besides the SetWorkerSleepSchedule? I've merged my code so that it's up-to-date with your current fix.

Hah, the perils of cross-timezone development.

Were there any other errors you were getting besides the SetWorkerSleepSchedule?

Yeah, check my comment above. It has two lines starting with --- FAIL: that show the name of the tests that are failing.

Hah, the perils of cross-timezone development. > Were there any other errors you were getting besides the SetWorkerSleepSchedule? Yeah, check my comment above. It has two lines starting with `--- FAIL:` that show the name of the tests that are failing.
Author
Collaborator

Okay, the signoff tests are not happy either. I'll take a look at them! Thanks!

Okay, the signoff tests are not happy either. I'll take a look at them! Thanks!

Okay, the signoff tests are not happy either. I'll take a look at them! Thanks!

Yeah, those are the important ones. The rest is caused by #104219 -- check that issue for a workaround.

> Okay, the signoff tests are not happy either. I'll take a look at them! Thanks! Yeah, those are the important ones. The rest is caused by #104219 -- check that issue for a workaround.
Eveline Anderson added 1 commit 2023-06-01 23:37:01 +02:00
Eveline Anderson added 1 commit 2023-06-01 23:38:18 +02:00
Author
Collaborator

Good news! I got the TestWorkerSignoffTaskRequeue and TestWorkerSignoffStatusChangeRequest passed. Turns out it was simpler than I thought. Just had to update the BroadcastWorkerUpdate and SaveWorkerStatus parameters. You can see it in my branch here (I spelled TestWorkerSignoffTaskRequeue with a q...oops) :
7cb484967c

That was 5 hours worth of debugging and headbanging, I can't believe it was that simple

When I run the whole test code, I still get some errors shown up job_compilers_test.go and calculations_test.go. Although, the calculation's one seems to be more related to the timezone, I want to double-check and make sure. I'll work on the job compiler's issue as well.

Are there any more errors on your end that you see and I missed them?

Good news! I got the `TestWorkerSignoffTaskRequeue` and `TestWorkerSignoffStatusChangeRequest` passed. Turns out it was simpler than I thought. Just had to update the BroadcastWorkerUpdate and SaveWorkerStatus parameters. You can see it in my branch here (I spelled TestWorkerSignoffTaskRequeue with a q...oops) : https://projects.blender.org/Evelinealy/flamenco/commit/7cb484967cafca8a4396608417ec0c3b3af76359 ~~That was 5 hours worth of debugging and headbanging, I can't believe it was that simple~~ When I run the whole test code, I still get some errors shown up `job_compilers_test.go` and `calculations_test.go`. Although, the calculation's one seems to be more related to the timezone, I want to double-check and make sure. I'll work on the job compiler's issue as well. Are there any more errors on your end that you see and I missed them?
Sybren A. Stüvel requested changes 2023-06-02 11:06:27 +02:00
Sybren A. Stüvel left a comment
Owner

For me all the tests pass now, including the timezone-related ones.

Just a few small remarks left.

For me all the tests pass now, including the timezone-related ones. Just a few small remarks left.
@ -14,3 +14,3 @@
"[yaml]": {
"editor.autoIndent": "keep",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.defaultFormatter": "esbenp.prettier-vscode"

Such IDE configuration changes shouldn't be in the same PR as functional changes to Flamenco itself.

This to me is showing that we shouldn't have .vscode/settings.json in the repository at all; it's too fragile. It was fine when I was the only one working on the Go code, but it's clear that this doesn't work when we both are.

To keep things simple, it's ok for now to keep these changes in here. After this PR is merged, I'll remove the file entirely and add it to .gitignore.

Such IDE configuration changes shouldn't be in the same PR as functional changes to Flamenco itself. This to me is showing that we shouldn't have `.vscode/settings.json` in the repository at all; it's too fragile. It was fine when I was the only one working on the Go code, but it's clear that this doesn't work when we both are. To keep things simple, it's ok for now to keep these changes in here. After this PR is merged, I'll remove the file entirely and add it to `.gitignore`.
@ -278,3 +286,3 @@
savedWorker.Status = api.WorkerStatusOffline
savedWorker.StatusChangeClear()
mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), &savedWorker).Return(nil)
mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), gomock.Any()).Return(nil)

I can imagine this works, as it removes the entire check against savedWorker and accepts any value instead. That's a bit too weak for a unit test though.

I can imagine this works, as it removes the entire check against `savedWorker` and accepts any value instead. That's a bit too weak for a unit test though.
Eveline Anderson added 1 commit 2023-06-02 16:21:32 +02:00
Eveline Anderson added 1 commit 2023-06-02 16:39:39 +02:00
Eveline Anderson added 1 commit 2023-06-02 16:42:31 +02:00
Eveline Anderson added 1 commit 2023-06-02 16:48:03 +02:00
Sybren A. Stüvel approved these changes 2023-06-02 22:49:34 +02:00
Sybren A. Stüvel left a comment
Owner

👌

👌
Sybren A. Stüvel merged commit 4d2200bb0c into main 2023-06-02 22:50:10 +02:00
Sign in to join this conversation.
No description provided.