@@ -108,6 +108,99 @@ describe Calendars do
108108 bad_request = client.get(route, headers: headers).status_code
109109 bad_request.should eq(400 )
110110 end
111+
112+ describe " #check_permission" do
113+ it " should return owner role when checking own calendar" do
114+ WebMock .stub(:post , " https://login.microsoftonline.com/bb89674a-238b-4b7d-91ec-6bebad83553a/oauth2/v2.0/token" )
115+ .to_return(body: File .read(" ./spec/fixtures/tokens/o365_token.json" ))
116+
117+ route = " #{ CALENDARS_BASE } /dev@acaprojects.onmicrosoft.com/permission"
118+ response = client.get(route, headers: headers)
119+ response.status_code.should eq(200 )
120+
121+ body = JSON .parse(response.body)
122+ body[" has_access" ].should eq(true )
123+ body[" role" ].should eq(" owner" )
124+ end
125+
126+ it " should return write access when user has write permission" do
127+ WebMock .stub(:post , " https://login.microsoftonline.com/bb89674a-238b-4b7d-91ec-6bebad83553a/oauth2/v2.0/token" )
128+ .to_return(body: File .read(" ./spec/fixtures/tokens/o365_token.json" ))
129+ WebMock .stub(:get , " https://graph.microsoft.com/v1.0/users/pradeep%40domain.com/calendar/calendarPermissions" )
130+ .to_return(body: File .read(" ./spec/fixtures/calendars/o365/calendar_permissions_write_access.json" ))
131+
132+ route = " #{ CALENDARS_BASE } /pradeep@domain.com/permission"
133+ response = client.get(route, headers: headers)
134+ response.status_code.should eq(200 )
135+
136+ body = JSON .parse(response.body)
137+ body[" has_access" ].should eq(true )
138+ body[" role" ].should eq(" write" )
139+ end
140+
141+ it " should return delegate access when user has delegate permission" do
142+ WebMock .stub(:post , " https://login.microsoftonline.com/bb89674a-238b-4b7d-91ec-6bebad83553a/oauth2/v2.0/token" )
143+ .to_return(body: File .read(" ./spec/fixtures/tokens/o365_token.json" ))
144+ WebMock .stub(:get , " https://graph.microsoft.com/v1.0/users/pradeep%40domain.com/calendar/calendarPermissions" )
145+ .to_return(body: File .read(" ./spec/fixtures/calendars/o365/calendar_permissions_delegate_access.json" ))
146+
147+ route = " #{ CALENDARS_BASE } /pradeep@domain.com/permission"
148+ response = client.get(route, headers: headers)
149+ response.status_code.should eq(200 )
150+
151+ body = JSON .parse(response.body)
152+ body[" has_access" ].should eq(true )
153+ body[" role" ].should eq(" delegateWithoutPrivateEventAccess" )
154+ end
155+
156+ it " should return no access when user has only read permission" do
157+ WebMock .stub(:post , " https://login.microsoftonline.com/bb89674a-238b-4b7d-91ec-6bebad83553a/oauth2/v2.0/token" )
158+ .to_return(body: File .read(" ./spec/fixtures/tokens/o365_token.json" ))
159+ WebMock .stub(:get , " https://graph.microsoft.com/v1.0/users/pradeep%40domain.com/calendar/calendarPermissions" )
160+ .to_return(body: File .read(" ./spec/fixtures/calendars/o365/calendar_permissions_read_only.json" ))
161+
162+ route = " #{ CALENDARS_BASE } /pradeep@domain.com/permission"
163+ response = client.get(route, headers: headers)
164+ response.status_code.should eq(200 )
165+
166+ body = JSON .parse(response.body)
167+ body[" has_access" ].should eq(false )
168+ body[" role" ].should eq(" read" )
169+ end
170+
171+ it " should return no access when user is not in permissions list" do
172+ WebMock .stub(:post , " https://login.microsoftonline.com/bb89674a-238b-4b7d-91ec-6bebad83553a/oauth2/v2.0/token" )
173+ .to_return(body: File .read(" ./spec/fixtures/tokens/o365_token.json" ))
174+ WebMock .stub(:get , " https://graph.microsoft.com/v1.0/users/pradeep%40domain.com/calendar/calendarPermissions" )
175+ .to_return(body: File .read(" ./spec/fixtures/calendars/o365/calendar_permissions_no_access.json" ))
176+
177+ route = " #{ CALENDARS_BASE } /pradeep@domain.com/permission"
178+ response = client.get(route, headers: headers)
179+ response.status_code.should eq(200 )
180+
181+ body = JSON .parse(response.body)
182+ body[" has_access" ].should eq(false )
183+ body[" role" ].should eq(" none" )
184+ end
185+
186+ it " should handle errors gracefully and return error role" do
187+ WebMock .stub(:post , " https://login.microsoftonline.com/bb89674a-238b-4b7d-91ec-6bebad83553a/oauth2/v2.0/token" )
188+ .to_return(body: File .read(" ./spec/fixtures/tokens/o365_token.json" ))
189+ # Stub with both encoded and unencoded versions to ensure match
190+ WebMock .stub(:get , " https://graph.microsoft.com/v1.0/users/pradeep%40domain.com/calendar/calendarPermissions" )
191+ .to_return(status: 500 , body: " Internal Server Error" )
192+ WebMock .stub(:get , " https://graph.microsoft.com/v1.0/users/pradeep@domain.com/calendar/calendarPermissions" )
193+ .to_return(status: 500 , body: " Internal Server Error" )
194+
195+ route = " #{ CALENDARS_BASE } /pradeep@domain.com/permission"
196+ response = client.get(route, headers: headers)
197+ response.status_code.should eq(200 )
198+
199+ body = JSON .parse(response.body)
200+ body[" has_access" ].should eq(false )
201+ body[" role" ].should eq(" error" )
202+ end
203+ end
111204end
112205
113206CALENDARS_BASE = Calendars .base_route
0 commit comments