server = $this->createMock(\Sabre\DAV\Server::class); $this->userSession = $this->createMock(IUserSession::class); $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->themingDefaults = $this->createMock(ThemingDefaults::class); $this->request = $this->createMock(IRequest::class); $this->l10n = $this->createMock(IL10N::class); $this->plugin = new AppleProvisioningPlugin($this->userSession, $this->urlGenerator, $this->themingDefaults, $this->request, $this->l10n, function () { return 'generated-uuid'; } ); $this->sabreRequest = $this->createMock(\Sabre\HTTP\RequestInterface::class); $this->sabreResponse = $this->createMock(\Sabre\HTTP\ResponseInterface::class); } public function testInitialize(): void { $server = $this->createMock(\Sabre\DAV\Server::class); $plugin = new AppleProvisioningPlugin($this->userSession, $this->urlGenerator, $this->themingDefaults, $this->request, $this->l10n, function (): void { }); $server->expects($this->once()) ->method('on') ->with('method:GET', [$plugin, 'httpGet'], 90); $plugin->initialize($server); } public function testHttpGetOnHttp(): void { $this->sabreRequest->expects($this->once()) ->method('getPath') ->with() ->willReturn('provisioning/apple-provisioning.mobileconfig'); $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') ->willReturn($user); $this->request->expects($this->once()) ->method('getServerProtocol') ->wilLReturn('http'); $this->themingDefaults->expects($this->once()) ->method('getName') ->willReturn('InstanceName'); $this->l10n->expects($this->once()) ->method('t') ->with('Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS.', ['InstanceName']) ->willReturn('LocalizedErrorMessage'); $this->sabreResponse->expects($this->once()) ->method('setStatus') ->with(200); $this->sabreResponse->expects($this->once()) ->method('setHeader') ->with('Content-Type', 'text/plain; charset=utf-8'); $this->sabreResponse->expects($this->once()) ->method('setBody') ->with('LocalizedErrorMessage'); $returnValue = $this->plugin->httpGet($this->sabreRequest, $this->sabreResponse); $this->assertFalse($returnValue); } public function testHttpGetOnHttps(): void { $this->sabreRequest->expects($this->once()) ->method('getPath') ->with() ->willReturn('provisioning/apple-provisioning.mobileconfig'); $user = $this->createMock(IUser::class); $user->expects($this->once()) ->method('getUID') ->willReturn('userName'); $this->userSession->expects($this->once()) ->method('getUser') ->willReturn($user); $this->request->expects($this->once()) ->method('getServerProtocol') ->wilLReturn('https'); $this->urlGenerator->expects($this->once()) ->method('getBaseUrl') ->willReturn('https://nextcloud.tld/nextcloud'); $this->themingDefaults->expects($this->once()) ->method('getName') ->willReturn('InstanceName'); $this->l10n->expects($this->exactly(2)) ->method('t') ->withConsecutive( ['Configures a CalDAV account'], ['Configures a CardDAV account'], ) ->willReturnOnConsecutiveCalls( 'LocalizedConfiguresCalDAV', 'LocalizedConfiguresCardDAV', ); $this->sabreResponse->expects($this->once()) ->method('setStatus') ->with(200); $this->sabreResponse->expects($this->exactly(2)) ->method('setHeader') ->withConsecutive( ['Content-Disposition', 'attachment; filename="userName-apple-provisioning.mobileconfig"'], ['Content-Type', 'application/xml; charset=utf-8'], ); $this->sabreResponse->expects($this->once()) ->method('setBody') ->with(<< PayloadContent CalDAVAccountDescription InstanceName CalDAVHostName nextcloud.tld CalDAVUsername userName CalDAVUseSSL CalDAVPort 443 PayloadDescription LocalizedConfiguresCalDAV PayloadDisplayName InstanceName CalDAV PayloadIdentifier tld.nextcloud.generated-uuid PayloadType com.apple.caldav.account PayloadUUID generated-uuid PayloadVersion 1 CardDAVAccountDescription InstanceName CardDAVHostName nextcloud.tld CardDAVUsername userName CardDAVUseSSL CardDAVPort 443 PayloadDescription LocalizedConfiguresCardDAV PayloadDisplayName InstanceName CardDAV PayloadIdentifier tld.nextcloud.generated-uuid PayloadType com.apple.carddav.account PayloadUUID generated-uuid PayloadVersion 1 PayloadDisplayName InstanceName PayloadIdentifier tld.nextcloud.generated-uuid PayloadRemovalDisallowed PayloadType Configuration PayloadUUID generated-uuid PayloadVersion 1 EOF ); $returnValue = $this->plugin->httpGet($this->sabreRequest, $this->sabreResponse); $this->assertFalse($returnValue); } }