@@ -25,7 +25,8 @@ import {
2525 normalizeDataverseGuid ,
2626} from '@/tools/microsoft_dynamics_365/utils'
2727
28- const ENVIRONMENT_URL = 'https://contoso.crm.dynamics.com'
28+ const ENVIRONMENT_ALIAS = 'https://contoso.crm.dynamics.com'
29+ const ENVIRONMENT_URL = 'https://contoso.api.crm.dynamics.com'
2930const ACCESS_TOKEN = 'test-access-token'
3031const LEAD_ID = '11111111-1111-4111-8111-111111111111'
3132const OPPORTUNITY_ID = '22222222-2222-4222-8222-222222222222'
@@ -38,21 +39,21 @@ const PROCESS_INSTANCE_ID = '77777777-7777-4777-8777-777777777777'
3839const LIST_PARAMS : DataverseListRecordsParams = {
3940 accessToken : ACCESS_TOKEN ,
4041 instanceUrl : ENVIRONMENT_URL ,
41- environmentUrl : ENVIRONMENT_URL ,
42+ environmentUrl : ENVIRONMENT_ALIAS ,
4243 entitySetName : 'accounts' ,
4344}
4445
4546const SEARCH_PARAMS : DataverseSearchParams = {
4647 accessToken : ACCESS_TOKEN ,
4748 instanceUrl : ENVIRONMENT_URL ,
48- environmentUrl : ENVIRONMENT_URL ,
49+ environmentUrl : ENVIRONMENT_ALIAS ,
4950 searchTerm : 'Contoso' ,
5051}
5152
5253const QUALIFY_PARAMS : DataverseQualifyLeadParams = {
5354 accessToken : ACCESS_TOKEN ,
5455 instanceUrl : ENVIRONMENT_URL ,
55- environmentUrl : ENVIRONMENT_URL ,
56+ environmentUrl : ENVIRONMENT_ALIAS ,
5657 leadId : LEAD_ID ,
5758 createAccount : true ,
5859 createContact : true ,
@@ -62,7 +63,7 @@ const QUALIFY_PARAMS: DataverseQualifyLeadParams = {
6263const CLOSE_OPPORTUNITY_PARAMS : DataverseCloseOpportunityParams = {
6364 accessToken : ACCESS_TOKEN ,
6465 instanceUrl : ENVIRONMENT_URL ,
65- environmentUrl : ENVIRONMENT_URL ,
66+ environmentUrl : ENVIRONMENT_ALIAS ,
6667 opportunityId : OPPORTUNITY_ID ,
6768 outcome : 'won' ,
6869 subject : 'Opportunity won' ,
@@ -71,7 +72,7 @@ const CLOSE_OPPORTUNITY_PARAMS: DataverseCloseOpportunityParams = {
7172const CLOSE_CASE_PARAMS : DataverseCloseCaseParams = {
7273 accessToken : ACCESS_TOKEN ,
7374 instanceUrl : ENVIRONMENT_URL ,
74- environmentUrl : ENVIRONMENT_URL ,
75+ environmentUrl : ENVIRONMENT_ALIAS ,
7576 caseId : CASE_ID ,
7677 subject : 'Case resolved' ,
7778}
@@ -104,10 +105,23 @@ describe('Microsoft Dataverse Dynamics CRM shared safety', () => {
104105 } )
105106
106107 it . each ( [
107- [ 'https://contoso.crm.dynamics.com/' , 'https://contoso.crm.dynamics.com' ] ,
108- [ 'https://contoso.crm4.dynamics.com' , 'https://contoso.crm4.dynamics.com' ] ,
108+ microsoftDynamics365ListRecordsTool ,
109+ microsoftDynamics365GetRecordTool ,
110+ microsoftDynamics365CreateRecordTool ,
111+ microsoftDynamics365UpdateRecordTool ,
112+ microsoftDynamics365SearchRecordsTool ,
113+ microsoftDynamics365QualifyLeadTool ,
114+ microsoftDynamics365CloseOpportunityTool ,
115+ microsoftDynamics365CloseCaseTool ,
116+ ] ) ( '$id strips OAuth authorization before following redirects' , ( tool ) => {
117+ expect ( tool . request . stripAuthOnRedirect ) . toBe ( true )
118+ } )
119+
120+ it . each ( [
121+ [ 'https://contoso.crm.dynamics.com/' , 'https://contoso.api.crm.dynamics.com' ] ,
122+ [ 'https://contoso.crm4.dynamics.com' , 'https://contoso.api.crm4.dynamics.com' ] ,
109123 [ 'https://contoso.api.crm4.dynamics.com' , 'https://contoso.api.crm4.dynamics.com' ] ,
110- [ 'https://contoso.crm9.dynamics.com' , 'https://contoso.crm9.dynamics.com' ] ,
124+ [ 'https://contoso.crm9.dynamics.com' , 'https://contoso.api. crm9.dynamics.com' ] ,
111125 ] ) ( 'accepts a public-cloud Dataverse environment host' , ( input , expected ) => {
112126 expect ( getDynamics365BaseUrl ( input , expected ) ) . toBe ( expected )
113127 } )
@@ -195,6 +209,7 @@ describe('microsoft_dynamics_365_list_records response validation', () => {
195209
196210 it ( 'uses only a validated same-table continuation URL for the next page' , ( ) => {
197211 const nextLink = `${ ENVIRONMENT_URL } /api/data/v9.2/accounts?$skiptoken=opaque`
212+ const aliasNextLink = `${ ENVIRONMENT_ALIAS } /api/data/v9.2/accounts?$skiptoken=opaque`
198213 expect (
199214 resolveUrl ( microsoftDynamics365ListRecordsTool . request . url , {
200215 ...LIST_PARAMS ,
@@ -203,6 +218,12 @@ describe('microsoft_dynamics_365_list_records response validation', () => {
203218 filter : 'statecode eq 0' ,
204219 } )
205220 ) . toBe ( nextLink )
221+ expect (
222+ resolveUrl ( microsoftDynamics365ListRecordsTool . request . url , {
223+ ...LIST_PARAMS ,
224+ nextLink : aliasNextLink ,
225+ } )
226+ ) . toBe ( aliasNextLink )
206227
207228 for ( const invalidNextLink of [
208229 'https://attacker.example/api/data/v9.2/accounts?$skiptoken=opaque' ,
0 commit comments