diff --git a/sdk/communication/azure-communication-callingserver/pom.xml b/sdk/communication/azure-communication-callingserver/pom.xml index 705e5ecbf9d4..af99ad818866 100644 --- a/sdk/communication/azure-communication-callingserver/pom.xml +++ b/sdk/communication/azure-communication-callingserver/pom.xml @@ -40,7 +40,7 @@ src/test 0.70 0.70 - false + true diff --git a/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallAsyncClient.java b/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallAsyncClient.java index 4452f1cc9b07..ae41fd8bf4ed 100644 --- a/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallAsyncClient.java +++ b/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallAsyncClient.java @@ -420,7 +420,9 @@ private CreateCallRequestInternal createCreateCallRequest(CommunicationIdentifie for (EventSubscriptionType requestedCallEvent : createCallOptions.getRequestedCallEvents()) { requestedCallEvents.add(EventSubscriptionTypeModel.fromString(requestedCallEvent.toString())); } - PhoneNumberIdentifierModel sourceAlternateIdentity = new PhoneNumberIdentifierModel().setValue(createCallOptions.getAlternateCallerId().getPhoneNumber()); + + PhoneNumberIdentifierModel sourceAlternateIdentity = createCallOptions.getAlternateCallerId() == null + ? null : new PhoneNumberIdentifierModel().setValue(createCallOptions.getAlternateCallerId().getPhoneNumber()); request.setSource(CommunicationIdentifierConverter.convert(source)) .setTargets(targetsList.stream().map(target -> CommunicationIdentifierConverter.convert(target)) @@ -448,7 +450,12 @@ private CancelMediaOperationsResult convertCancelMediaOperationsResponse( } private PlayAudioRequestInternal convertPlayAudioRequest(PlayAudioRequest request) { - return new PlayAudioRequestInternal().setOperationContext(request.getOperationContext()); + PlayAudioRequestInternal playAudioRequestInternal = new PlayAudioRequestInternal(); + playAudioRequestInternal.setAudioFileUri(request.getAudioFileUri()); + playAudioRequestInternal.setAudioFileId(request.getAudioFileId()); + playAudioRequestInternal.setLoop(request.isLoop()); + playAudioRequestInternal.setOperationContext(request.getOperationContext()); + return playAudioRequestInternal; } private CreateCallResult convertCreateCallWithResponse(CreateCallResponse response) { diff --git a/sdk/communication/azure-communication-callingserver/src/test/java/com/azure/communication/callingserver/CallClientBuilderTests.java b/sdk/communication/azure-communication-callingserver/src/test/java/com/azure/communication/callingserver/CallClientBuilderTests.java new file mode 100644 index 000000000000..07ecfcd18f1b --- /dev/null +++ b/sdk/communication/azure-communication-callingserver/src/test/java/com/azure/communication/callingserver/CallClientBuilderTests.java @@ -0,0 +1,118 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package com.azure.communication.callingserver; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.net.MalformedURLException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +import com.azure.core.credential.AzureKeyCredential; +import com.azure.core.http.HttpClient; +import com.azure.core.http.HttpPipelineBuilder; +import com.azure.core.http.HttpRequest; +import com.azure.core.http.HttpResponse; + +import org.junit.jupiter.api.Test; + +import reactor.core.publisher.Mono; + +public class CallClientBuilderTests { + static final String MOCK_URL = "https://REDACTED.communication.azure.com"; + static final String MOCK_ACCESS_KEY = "eyKfcHciOiJIUzI1NiIsInR5cCI6IkqXVCJ9eyJzdWIiOiIxMjM0NTY5ODkwIiwibmFtZSI7IkpvaGfQSflKxwRJSMeKKF2QT4fwpMeJf36POk6yJVadUs4s5d"; + static final String MOCK_CONNECTION_STRING = "endpoint=https://REDACTED.communication.azure.com/;accesskey=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaGfQSflKxwRJSMeKKF2QT4fwpMeJf36POk6yJVadQssw5c"; + + static class NoOpHttpClient implements HttpClient { + @Override + public Mono send(HttpRequest request) { + return Mono.empty(); // NOP + } + } + + private final CallClientBuilder builder = new CallClientBuilder(); + + @Test + public void missingTokenCredentialTest() + throws NullPointerException, MalformedURLException, InvalidKeyException, NoSuchAlgorithmException { + builder + .endpoint(MOCK_URL) + .httpClient(new NoOpHttpClient()); + assertThrows(Exception.class, () -> { + builder.buildAsyncClient(); + }); + } + + @Test + public void missingUrlTest() + throws NullPointerException, MalformedURLException { + builder + .credential(new AzureKeyCredential(MOCK_ACCESS_KEY)) + .httpClient(new NoOpHttpClient()); + assertThrows(Exception.class, () -> { + builder.buildAsyncClient(); + }); + } + + @Test + public void nullPipelineTest() { + assertThrows(NullPointerException.class, () -> { + builder + .connectionString(MOCK_CONNECTION_STRING) + .httpClient(new NoOpHttpClient()) + .pipeline(null); + }); + } + + @Test + public void nullCustomPolicyTest() { + assertThrows(NullPointerException.class, () -> { + builder + .connectionString(MOCK_CONNECTION_STRING) + .httpClient(new NoOpHttpClient()) + .addPolicy(null); + }); + } + + @Test + public void nullConfigurationTest() { + assertThrows(NullPointerException.class, () -> { + builder + .connectionString(MOCK_CONNECTION_STRING) + .httpClient(new NoOpHttpClient()) + .configuration(null); + }); + } + + @Test + public void nullHttpLogOptionsTest() { + assertThrows(NullPointerException.class, () -> { + builder + .connectionString(MOCK_CONNECTION_STRING) + .httpClient(new NoOpHttpClient()) + .httpLogOptions(null); + }); + } + + @Test + public void nullRetryPolicyTest() { + assertThrows(NullPointerException.class, () -> { + builder + .connectionString(MOCK_CONNECTION_STRING) + .httpClient(new NoOpHttpClient()) + .retryPolicy(null); + }); + } + + @Test + public void buildPiplineForClient() { + CallAsyncClient callAsyncClient = builder + .connectionString(MOCK_CONNECTION_STRING) + .httpClient(new NoOpHttpClient()) + .pipeline(new HttpPipelineBuilder().build()) + .buildAsyncClient(); + assertNotNull(callAsyncClient); + } +} +