11import { describe , expect , it } from '@effect/vitest' ;
2- import { UnexpectedStatus , UserService } from './user-scripts.js' ;
2+ import { GetUsersError , UnexpectedStatus , UserService } from './user-scripts.js' ;
33import { Effect , Layer } from 'effect' ;
44import { HttpClient , HttpClientResponse } from '@effect/platform' ;
55
6- class NoContentResponse extends Response {
7- constructor ( status ?: number ) {
8- super ( null , {
9- status : status || 204 ,
10- statusText : 'No Content' ,
11- } ) ;
6+ describe ( 'deleteUser' , ( ) => {
7+ class NoContentResponse extends Response {
8+ constructor ( status ?: number ) {
9+ super ( null , {
10+ status : status || 204 ,
11+ statusText : 'No Content' ,
12+ } ) ;
13+ }
1214 }
13- }
14-
15- const TestHttpClient = Layer . succeed (
16- HttpClient . HttpClient ,
17- HttpClient . make ( ( request ) => {
18- return Effect . sync ( function ( ) {
19- return HttpClientResponse . fromWeb ( request , new NoContentResponse ( ) ) ;
20- } ) ;
21- } ) ,
22- ) ;
23- const TestHttpClient200 = Layer . succeed (
24- HttpClient . HttpClient ,
25- HttpClient . make ( ( request ) => {
26- return Effect . sync ( function ( ) {
27- return HttpClientResponse . fromWeb ( request , new NoContentResponse ( 200 ) ) ;
28- } ) ;
29- } ) ,
30- ) ;
31-
32- const TestLayer = UserService . DefaultWithoutDependencies . pipe ( Layer . provide ( TestHttpClient ) ) ;
33- const TestLayerFail = UserService . DefaultWithoutDependencies . pipe ( Layer . provide ( TestHttpClient200 ) ) ;
3415
35- describe ( 'deleteUser' , ( ) => {
16+ const TestHttpClient = Layer . succeed (
17+ HttpClient . HttpClient ,
18+ HttpClient . make ( ( request ) => {
19+ return Effect . sync ( function ( ) {
20+ return HttpClientResponse . fromWeb ( request , new NoContentResponse ( ) ) ;
21+ } ) ;
22+ } ) ,
23+ ) ;
24+ const TestHttpClient200 = Layer . succeed (
25+ HttpClient . HttpClient ,
26+ HttpClient . make ( ( request ) => {
27+ return Effect . sync ( function ( ) {
28+ return HttpClientResponse . fromWeb ( request , new NoContentResponse ( 200 ) ) ;
29+ } ) ;
30+ } ) ,
31+ ) ;
32+
33+ const TestLayer = UserService . DefaultWithoutDependencies . pipe ( Layer . provide ( TestHttpClient ) ) ;
34+ const TestLayerFail = UserService . DefaultWithoutDependencies . pipe (
35+ Layer . provide ( TestHttpClient200 ) ,
36+ ) ;
37+
3638 it . effect ( 'should delete a user' , ( ) =>
3739 Effect . gen ( function * ( ) {
3840 const userServices = yield * UserService ;
@@ -55,3 +57,69 @@ describe('deleteUser', () => {
5557 } ) . pipe ( Effect . provide ( TestLayerFail ) ) ,
5658 ) ;
5759} ) ;
60+
61+ describe ( 'getUsers' , ( ) => {
62+ const TestHttpClient = Layer . succeed (
63+ HttpClient . HttpClient ,
64+ HttpClient . make ( ( request ) => {
65+ return Effect . sync ( function ( ) {
66+ return HttpClientResponse . fromWeb (
67+ request ,
68+ new Response (
69+ JSON . stringify ( {
70+ _links : {
71+ self : {
72+ href : 'http://localhost:9000/environments/123/users' ,
73+ } ,
74+ } ,
75+ _embedded : {
76+ users : [ ] ,
77+ } ,
78+ count : 0 ,
79+ size : 0 ,
80+ } ) ,
81+ ) ,
82+ ) ;
83+ } ) ;
84+ } ) ,
85+ ) ;
86+
87+ const TestLayer = UserService . DefaultWithoutDependencies . pipe ( Layer . provide ( TestHttpClient ) ) ;
88+
89+ it . effect ( 'should get users' , ( ) =>
90+ Effect . gen ( function * ( ) {
91+ const userServices = yield * UserService ;
92+
93+ const res = yield * userServices . getUsers (
94+ 'http://localhost:9000' ,
95+ '123' ,
96+ 'abc' ,
97+ 'email' ,
98+ 'wingar_helena' ,
99+ ) ;
100+
101+ expect ( res ) . toEqual ( {
102+ _links : {
103+ self : {
104+ href : 'http://localhost:9000/environments/123/users' ,
105+ } ,
106+ } ,
107+ _embedded : {
108+ users : [ ] ,
109+ } ,
110+ count : 0 ,
111+ size : 0 ,
112+ } ) ;
113+ } ) . pipe ( Effect . provide ( TestLayer ) ) ,
114+ ) ;
115+ it ( 'should handle errors' , ( ) =>
116+ Effect . gen ( function * ( ) {
117+ const userServices = yield * UserService ;
118+
119+ const res = yield * Effect . flip (
120+ userServices . getUsers ( 'http://localhost:9000' , '123' , 'abc' , 'email' , 'wingar_helena' ) ,
121+ ) ;
122+
123+ expect ( res ) . toBeInstanceOf ( GetUsersError ) ;
124+ } ) . pipe ( Effect . provide ( TestLayer ) ) ) ;
125+ } ) ;
0 commit comments