<?php
/**
* SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Settings\Tests\Mailer;
use OC\Mail\EMailTemplate;
use OC\Mail\Message;
use OCA\Settings\Mailer\NewUserMailHelper;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Defaults;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\L10N\IFactory;
use OCP\Mail\Headers\AutoSubmitted;
use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMailer;
use OCP\Security\ICrypto;
use OCP\Security\ISecureRandom;
use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class NewUserMailHelperTest extends TestCase {
private Defaults& MockObject $defaults;
private IURLGenerator& MockObject $urlGenerator;
private IL10N& MockObject $l10n;
private IFactory& MockObject $l10nFactory;
private IMailer& MockObject $mailer;
private ISecureRandom& MockObject $secureRandom;
private ITimeFactory& MockObject $timeFactory;
private IConfig& MockObject $config;
private ICrypto& MockObject $crypto;
private NewUserMailHelper $newUserMailHelper;
protected function setUp(): void {
parent::setUp();
$this->defaults = $this->createMock(Defaults::class);
$this->defaults->method('getLogo')
->willReturn('myLogo');
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->l10n = $this->createMock(IL10N::class);
$this->l10nFactory = $this->createMock(IFactory::class);
$this->mailer = $this->createMock(IMailer::class);
$template = new EMailTemplate(
$this->defaults,
$this->urlGenerator,
$this->l10nFactory,
null,
null,
'test.TestTemplate',
[]
);
$this->mailer->method('createEMailTemplate')
->willReturn($template);
$this->secureRandom = $this->createMock(ISecureRandom::class);
$this->timeFactory = $this->createMock(ITimeFactory::class);
$this->config = $this->createMock(IConfig::class);
$this->config
->expects($this->any())
->method('getSystemValue')
->willReturnCallback(function ($arg) {
switch ($arg) {
case 'secret':
return 'MyInstanceWideSecret';
case 'customclient_desktop':
return 'https://nextcloud.com/install/#install-clients';
}
return '';
});
$this->crypto = $this->createMock(ICrypto::class);
$this->l10n->method('t')
->willReturnCallback(function ($text, $parameters = []) {
return vsprintf($text, $parameters);
});
$this->l10nFactory->method('get')
->willReturnCallback(function ($text, $lang) {
return $this->l10n;
});
$this->newUserMailHelper = new NewUserMailHelper(
$this->defaults,
$this->urlGenerator,
$this->l10nFactory,
$this->mailer,
$this->secureRandom,
$this->timeFactory,
$this->config,
$this->crypto,
'no-reply@nextcloud.com'
);
}
public function testGenerateTemplateWithPasswordResetToken(): void {
$this->secureRandom
->expects($this->once())
->method('generate')
->with(21, ISecureRandom::CHAR_ALPHANUMERIC)
->willReturn('MySuperLongSecureRandomToken');
$this->timeFactory
->expects($this->once())
->method('getTime')
->willReturn(12345);
/** @var IUser& MockObject $user */
$user = $this->createMock(IUser::class);
$user
->expects($this->any())
->method('getEmailAddress')
->willReturn('recipient@example.com');
$this->crypto
->expects($this->once())
->method('encrypt')
->with('12345:MySuperLongSecureRandomToken', 'recipient@example.comMyInstanceWideSecret')
->willReturn('TokenCiphertext');
$user
->expects($this->any())
->method('getUID')
->willReturn('john');
$this->config
->expects($this->once())
->method('setUserValue')
->with('john', 'core', 'lostpassword', 'TokenCiphertext');
$this->urlGenerator
->expects($this->once())
->method('linkToRouteAbsolute')
->with('core.lost.resetform', ['userId' => 'john', 'token' => 'MySuperLongSecureRandomToken'])
->willReturn('https://example.com/resetPassword/MySuperLongSecureRandomToken');
$user
->expects($this->any())
->method('getDisplayName')
->willReturn('john');
$this->defaults
->expects($this->any())
->method('getName')
->willReturn('TestCloud');
$this->defaults
->expects($this->atLeastOnce())
->method('getDefaultColorPrimary')
->willReturn('#00679e');
$this->defaults
->expects($this->atLeastOnce())
->method('getDefaultTextColorPrimary')
->willReturn('#ffffff');
$expectedHtmlBody = < < < EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en" xml:lang = "en" style = "-webkit-font-smoothing:antialiased;background:#fff!important" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta name = "viewport" content = "width=device-width" >
< title > < / title >
< style type = "text/css" > @ media only screen { html { min-height : 100 % ; background : #fff } } @ media only screen and ( max-width : 610px ) { table . body img { width : auto ; height : auto } table . body center { min-width : 0 !important } table . body . container { width : 95 % !important } table . body . columns { height : auto !important ; -moz- box-sizing : border-box ; -webkit- box-sizing : border-box ; box-sizing : border-box ; padding-left : 30 px !important ; padding-right : 30 px !important } th . small-12 { display : inline-block !important ; width : 100 % !important } table . menu { width : 100 % !important } table . menu td , table . menu th { width : auto !important ; display : inline-block !important } table . menu . vertical td , table . menu . vertical th { display : block !important } table . menu [ align = center ] { width : auto !important } } < / style >
< / head >
< body style = "-moz-box-sizing:border-box;-ms-text-size-adjust:100%;-webkit-box-sizing:border-box;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;margin:0;background:#fff!important;box-sizing:border-box;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;min-width:100%;padding:0;text-align:left;width:100%!important" >
< span class = "preheader" style = "color:#F5F5F5;display:none!important;font-size:1px;line-height:1px;max-height:0;max-width:0;mso-hide:all!important;opacity:0;overflow:hidden;visibility:hidden" >
< / span >
< table class = "body" style = "-webkit-font-smoothing:antialiased;margin:0;background:#fff;border-collapse:collapse;border-spacing:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "center" align = "center" valign = "top" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< center data-parsed = "" style = "min-width:580px;width:100%" > < table align = "center" class = "wrapper header float-center" style = "Margin:0 auto;background:#fff;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "wrapper-inner" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:20px;text-align:left;vertical-align:top;word-wrap:break-word" >
< table align = "center" class = "container" style = "Margin:0 auto;background:0 0;border-collapse:collapse;border-spacing:0;margin:0 auto;padding:0;text-align:inherit;vertical-align:top;width:150px" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table class = "row collapse" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< center data-parsed = "" style = "background-color:#00679e;min-width:175px;max-height:175px; padding:35px 0px;border-radius:200px" >
< img class = "logo float-center" src = "" alt = "TestCloud" align = "center" style = "-ms-interpolation-mode:bicubic;clear:both;display:block;float:none;margin:0 auto;outline:0;text-align:center;text-decoration:none;max-height:105px;max-width:105px;width:auto;height:auto" >
< / center >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / table >
< table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "40px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-size:80px;font-weight:400;hyphens:auto;line-height:80px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table > < table align = "center" class = "container main-heading float-center" style = "Margin:0 auto;background:0 0!important;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:580px" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< h1 class = "text-center" style = "Margin:0;Margin-bottom:10px;color:inherit;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:24px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:center;word-wrap:normal" > Welcome aboard< / h1 >
< / td >
< / tr >
< / tbody >
< / table >
< table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "36px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-size:40px;font-weight:400;hyphens:auto;line-height:36px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table > < table align = "center" class = "wrapper content float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "wrapper-inner" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table align = "center" class = "container" style = "Margin:0 auto;background:#fff;border-collapse:collapse;border-spacing:0;margin:0 auto;padding:0;text-align:inherit;vertical-align:top;width:580px" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" > < table class = "row description" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th class = "small-12 large-12 columns first last" style = "Margin:0 auto;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left" >
< p style = "Margin:0;Margin-bottom:10px;color:#777;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;margin-bottom:10px;padding:0;text-align:center" > Welcome to your TestCloud account, you can add, protect, and share your data.< / p >
< / th >
< th class = "expander" style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0" > < / th >
< / tr >
< / table >
< / th >
< / tr >
< / tbody >
< / table > < table class = "row description" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th class = "small-12 large-12 columns first last" style = "Margin:0 auto;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left" >
< p style = "Margin:0;Margin-bottom:10px;color:#777;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;margin-bottom:10px;padding:0;text-align:center" > Your Login is: john< / p >
< / th >
< th class = "expander" style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0" > < / th >
< / tr >
< / table >
< / th >
< / tr >
< / tbody >
< / table > < table class = "spacer" style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "50px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:50px;font-weight:400;hyphens:auto;line-height:50px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table >
< table align = "center" class = "row btn-group" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th class = "small-12 large-12 columns first last" style = "Margin:0 auto;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left" >
< center data-parsed = "" style = "min-width:490px;width:100%" >
<!-- [if (gte mso 9)|(IE)]>
< table >
< tr >
< td >
<![endif]-->
< table class = "button btn default primary float-center" style = "Margin:0 0 30px 0;border-collapse:collapse;border-spacing:0;display:inline-block;float:none;margin:0 0 30px 0;margin-right:15px;border-radius:8px;max-width:300px;padding:0;text-align:center;vertical-align:top;width:auto;background:#00679e;background-color:#00679e;color:#fefefe;" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border:0 solid #00679e;border-collapse:collapse!important;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< a href = "https://example.com/resetPassword/MySuperLongSecureRandomToken" style = "Margin:0;border:0 solid #00679e;color:#ffffff;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:regular;line-height:normal;margin:0;padding:8px;text-align:left;outline:1px solid #ffffff;text-decoration:none" > Set your password< / a >
< / td >
< / tr >
< / table >
< / td >
< / tr >
< / table >
<!-- [if (gte mso 9)|(IE)]>
< / td >
< td >
<![endif]-->
< table class = "button btn default secondary float-center" style = "Margin:0 0 30px 0;border-collapse:collapse;border-spacing:0;display:inline-block;float:none;background-color: #ccc;margin:0 0 30px 0;max-height:40px;max-width:300px;padding:1px;border-radius:8px;text-align:center;vertical-align:top;width:auto" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border:0 solid #777;border-collapse:collapse!important;color:#fefefe;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< a href = "https://nextcloud.com/install/#install-clients" style = "Margin:0;background-color:#fff;border:0 solid #777;color:#6C6C6C!important;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:regular;line-height:normal;margin:0;border-radius: 7px;padding:8px;text-align:left;text-decoration:none" > Install Client< / a >
< / td >
< / tr >
< / table >
< / td >
< / tr >
< / table >
<!-- [if (gte mso 9)|(IE)]>
< / td >
< / tr >
< / table >
<![endif]-->
< / center >
< / th >
< th class = "expander" style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0" > < / th >
< / tr >
< / table >
< / th >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / table > < table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "60px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:60px;font-weight:400;hyphens:auto;line-height:60px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table >
< table align = "center" class = "wrapper footer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "wrapper-inner" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< center data-parsed = "" style = "min-width:580px;width:100%" >
< table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "15px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:15px;font-weight:400;hyphens:auto;line-height:15px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table >
< p class = "text-center float-center" align = "center" style = "Margin:0;Margin-bottom:10px;color:#C8C8C8;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:12px;font-weight:400;line-height:16px;margin:0;margin-bottom:10px;padding:0;text-align:center" > TestCloud< br > This is an automatically sent email, please do not reply.< / p >
< / center >
< / td >
< / tr >
< / table > < / center >
< / td >
< / tr >
< / table >
<!-- prevent Gmail on iOS font size manipulation -->
< div style = "display:none;white-space:nowrap;font:15px courier;line-height:0" > < / div >
< / body >
< / html >
EOF;
$expectedTextBody = < < < EOF
Welcome aboard
Welcome to your TestCloud account, you can add, protect, and share your data.
Your Login is: john
Set your password: https://example.com/resetPassword/MySuperLongSecureRandomToken
Install Client: https://nextcloud.com/install/#install-clients
EOF;
$expectedTextBody .= "\n-- \n";
$expectedTextBody .= < < < EOF
TestCloud
This is an automatically sent email, please do not reply.
EOF;
$result = $this->newUserMailHelper->generateTemplate($user, true);
$this->assertEquals($expectedHtmlBody, $result->renderHtml());
$this->assertEquals($expectedTextBody, $result->renderText());
$this->assertSame('OC\Mail\EMailTemplate', get_class($result));
}
public function testGenerateTemplateWithoutPasswordResetToken(): void {
$this->urlGenerator
->expects($this->any())
->method('getAbsoluteURL')
->willReturnMap([
['/','https://example.com/'],
['myLogo',''],
]);
/** @var IUser& MockObject $user */
$user = $this->createMock(IUser::class);
$user
->expects($this->any())
->method('getDisplayName')
->willReturn('John Doe');
$user
->expects($this->any())
->method('getUID')
->willReturn('john');
$this->defaults
->expects($this->any())
->method('getName')
->willReturn('TestCloud');
$this->defaults
->expects($this->atLeastOnce())
->method('getDefaultColorPrimary')
->willReturn('#00679e');
$this->defaults
->expects($this->atLeastOnce())
->method('getDefaultTextColorPrimary')
->willReturn('#ffffff');
$expectedHtmlBody = < < < EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en" xml:lang = "en" style = "-webkit-font-smoothing:antialiased;background:#fff!important" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta name = "viewport" content = "width=device-width" >
< title > < / title >
< style type = "text/css" > @ media only screen { html { min-height : 100 % ; background : #fff } } @ media only screen and ( max-width : 610px ) { table . body img { width : auto ; height : auto } table . body center { min-width : 0 !important } table . body . container { width : 95 % !important } table . body . columns { height : auto !important ; -moz- box-sizing : border-box ; -webkit- box-sizing : border-box ; box-sizing : border-box ; padding-left : 30 px !important ; padding-right : 30 px !important } th . small-12 { display : inline-block !important ; width : 100 % !important } table . menu { width : 100 % !important } table . menu td , table . menu th { width : auto !important ; display : inline-block !important } table . menu . vertical td , table . menu . vertical th { display : block !important } table . menu [ align = center ] { width : auto !important } } < / style >
< / head >
< body style = "-moz-box-sizing:border-box;-ms-text-size-adjust:100%;-webkit-box-sizing:border-box;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;margin:0;background:#fff!important;box-sizing:border-box;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;min-width:100%;padding:0;text-align:left;width:100%!important" >
< span class = "preheader" style = "color:#F5F5F5;display:none!important;font-size:1px;line-height:1px;max-height:0;max-width:0;mso-hide:all!important;opacity:0;overflow:hidden;visibility:hidden" >
< / span >
< table class = "body" style = "-webkit-font-smoothing:antialiased;margin:0;background:#fff;border-collapse:collapse;border-spacing:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "center" align = "center" valign = "top" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< center data-parsed = "" style = "min-width:580px;width:100%" > < table align = "center" class = "wrapper header float-center" style = "Margin:0 auto;background:#fff;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "wrapper-inner" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:20px;text-align:left;vertical-align:top;word-wrap:break-word" >
< table align = "center" class = "container" style = "Margin:0 auto;background:0 0;border-collapse:collapse;border-spacing:0;margin:0 auto;padding:0;text-align:inherit;vertical-align:top;width:150px" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table class = "row collapse" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< center data-parsed = "" style = "background-color:#00679e;min-width:175px;max-height:175px; padding:35px 0px;border-radius:200px" >
< img class = "logo float-center" src = "" alt = "TestCloud" align = "center" style = "-ms-interpolation-mode:bicubic;clear:both;display:block;float:none;margin:0 auto;outline:0;text-align:center;text-decoration:none;max-height:105px;max-width:105px;width:auto;height:auto" >
< / center >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / table >
< table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "40px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-size:80px;font-weight:400;hyphens:auto;line-height:80px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table > < table align = "center" class = "container main-heading float-center" style = "Margin:0 auto;background:0 0!important;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:580px" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< h1 class = "text-center" style = "Margin:0;Margin-bottom:10px;color:inherit;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:24px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:center;word-wrap:normal" > Welcome aboard John Doe< / h1 >
< / td >
< / tr >
< / tbody >
< / table >
< table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "36px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-size:40px;font-weight:400;hyphens:auto;line-height:36px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table > < table align = "center" class = "wrapper content float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "wrapper-inner" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table align = "center" class = "container" style = "Margin:0 auto;background:#fff;border-collapse:collapse;border-spacing:0;margin:0 auto;padding:0;text-align:inherit;vertical-align:top;width:580px" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" > < table class = "row description" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th class = "small-12 large-12 columns first last" style = "Margin:0 auto;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left" >
< p style = "Margin:0;Margin-bottom:10px;color:#777;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;margin-bottom:10px;padding:0;text-align:center" > Welcome to your TestCloud account, you can add, protect, and share your data.< / p >
< / th >
< th class = "expander" style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0" > < / th >
< / tr >
< / table >
< / th >
< / tr >
< / tbody >
< / table > < table class = "row description" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th class = "small-12 large-12 columns first last" style = "Margin:0 auto;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left" >
< p style = "Margin:0;Margin-bottom:10px;color:#777;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;margin-bottom:10px;padding:0;text-align:center" > Your Login is: john< / p >
< / th >
< th class = "expander" style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0" > < / th >
< / tr >
< / table >
< / th >
< / tr >
< / tbody >
< / table > < table class = "spacer" style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "50px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:50px;font-weight:400;hyphens:auto;line-height:50px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table >
< table align = "center" class = "row btn-group" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th class = "small-12 large-12 columns first last" style = "Margin:0 auto;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left" >
< center data-parsed = "" style = "min-width:490px;width:100%" >
<!-- [if (gte mso 9)|(IE)]>
< table >
< tr >
< td >
<![endif]-->
< table class = "button btn default primary float-center" style = "Margin:0 0 30px 0;border-collapse:collapse;border-spacing:0;display:inline-block;float:none;margin:0 0 30px 0;margin-right:15px;border-radius:8px;max-width:300px;padding:0;text-align:center;vertical-align:top;width:auto;background:#00679e;background-color:#00679e;color:#fefefe;" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border:0 solid #00679e;border-collapse:collapse!important;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< a href = "https://example.com/" style = "Margin:0;border:0 solid #00679e;color:#ffffff;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:regular;line-height:normal;margin:0;padding:8px;text-align:left;outline:1px solid #ffffff;text-decoration:none" > Go to TestCloud< / a >
< / td >
< / tr >
< / table >
< / td >
< / tr >
< / table >
<!-- [if (gte mso 9)|(IE)]>
< / td >
< td >
<![endif]-->
< table class = "button btn default secondary float-center" style = "Margin:0 0 30px 0;border-collapse:collapse;border-spacing:0;display:inline-block;float:none;background-color: #ccc;margin:0 0 30px 0;max-height:40px;max-width:300px;padding:1px;border-radius:8px;text-align:center;vertical-align:top;width:auto" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border:0 solid #777;border-collapse:collapse!important;color:#fefefe;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< a href = "https://nextcloud.com/install/#install-clients" style = "Margin:0;background-color:#fff;border:0 solid #777;color:#6C6C6C!important;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:regular;line-height:normal;margin:0;border-radius: 7px;padding:8px;text-align:left;text-decoration:none" > Install Client< / a >
< / td >
< / tr >
< / table >
< / td >
< / tr >
< / table >
<!-- [if (gte mso 9)|(IE)]>
< / td >
< / tr >
< / table >
<![endif]-->
< / center >
< / th >
< th class = "expander" style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0" > < / th >
< / tr >
< / table >
< / th >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / table > < table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "60px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:60px;font-weight:400;hyphens:auto;line-height:60px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table >
< table align = "center" class = "wrapper footer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "wrapper-inner" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< center data-parsed = "" style = "min-width:580px;width:100%" >
< table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "15px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:15px;font-weight:400;hyphens:auto;line-height:15px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table >
< p class = "text-center float-center" align = "center" style = "Margin:0;Margin-bottom:10px;color:#C8C8C8;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:12px;font-weight:400;line-height:16px;margin:0;margin-bottom:10px;padding:0;text-align:center" > TestCloud< br > This is an automatically sent email, please do not reply.< / p >
< / center >
< / td >
< / tr >
< / table > < / center >
< / td >
< / tr >
< / table >
<!-- prevent Gmail on iOS font size manipulation -->
< div style = "display:none;white-space:nowrap;font:15px courier;line-height:0" > < / div >
< / body >
< / html >
EOF;
$expectedTextBody = < < < EOF
Welcome aboard John Doe
Welcome to your TestCloud account, you can add, protect, and share your data.
Your Login is: john
Go to TestCloud: https://example.com/
Install Client: https://nextcloud.com/install/#install-clients
EOF;
$expectedTextBody .= "\n-- \n";
$expectedTextBody .= < < < EOF
TestCloud
This is an automatically sent email, please do not reply.
EOF;
$result = $this->newUserMailHelper->generateTemplate($user, false);
$this->assertEquals($expectedHtmlBody, $result->renderHtml());
$this->assertEquals($expectedTextBody, $result->renderText());
$this->assertSame('OC\Mail\EMailTemplate', get_class($result));
}
public function testGenerateTemplateWithoutUserId(): void {
$this->urlGenerator
->expects($this->any())
->method('getAbsoluteURL')
->willReturnMap([
['/', 'https://example.com/'],
['myLogo', ''],
]);
/** @var IUser& MockObject $user */
$user = $this->createMock(IUser::class);
$user
->expects($this->any())
->method('getDisplayName')
->willReturn('John Doe');
$user
->expects($this->any())
->method('getUID')
->willReturn('john');
$user
->expects($this->atLeastOnce())
->method('getBackendClassName')
->willReturn('LDAP');
$this->defaults
->expects($this->any())
->method('getName')
->willReturn('TestCloud');
$this->defaults
->expects($this->atLeastOnce())
->method('getDefaultColorPrimary')
->willReturn('#00679e');
$this->defaults
->expects($this->atLeastOnce())
->method('getDefaultTextColorPrimary')
->willReturn('#ffffff');
$expectedHtmlBody = < < < EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en" xml:lang = "en" style = "-webkit-font-smoothing:antialiased;background:#fff!important" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta name = "viewport" content = "width=device-width" >
< title > < / title >
< style type = "text/css" > @ media only screen { html { min-height : 100 % ; background : #fff } } @ media only screen and ( max-width : 610px ) { table . body img { width : auto ; height : auto } table . body center { min-width : 0 !important } table . body . container { width : 95 % !important } table . body . columns { height : auto !important ; -moz- box-sizing : border-box ; -webkit- box-sizing : border-box ; box-sizing : border-box ; padding-left : 30 px !important ; padding-right : 30 px !important } th . small-12 { display : inline-block !important ; width : 100 % !important } table . menu { width : 100 % !important } table . menu td , table . menu th { width : auto !important ; display : inline-block !important } table . menu . vertical td , table . menu . vertical th { display : block !important } table . menu [ align = center ] { width : auto !important } } < / style >
< / head >
< body style = "-moz-box-sizing:border-box;-ms-text-size-adjust:100%;-webkit-box-sizing:border-box;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;margin:0;background:#fff!important;box-sizing:border-box;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;min-width:100%;padding:0;text-align:left;width:100%!important" >
< span class = "preheader" style = "color:#F5F5F5;display:none!important;font-size:1px;line-height:1px;max-height:0;max-width:0;mso-hide:all!important;opacity:0;overflow:hidden;visibility:hidden" >
< / span >
< table class = "body" style = "-webkit-font-smoothing:antialiased;margin:0;background:#fff;border-collapse:collapse;border-spacing:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "center" align = "center" valign = "top" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< center data-parsed = "" style = "min-width:580px;width:100%" > < table align = "center" class = "wrapper header float-center" style = "Margin:0 auto;background:#fff;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "wrapper-inner" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:20px;text-align:left;vertical-align:top;word-wrap:break-word" >
< table align = "center" class = "container" style = "Margin:0 auto;background:0 0;border-collapse:collapse;border-spacing:0;margin:0 auto;padding:0;text-align:inherit;vertical-align:top;width:150px" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table class = "row collapse" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< center data-parsed = "" style = "background-color:#00679e;min-width:175px;max-height:175px; padding:35px 0px;border-radius:200px" >
< img class = "logo float-center" src = "" alt = "TestCloud" align = "center" style = "-ms-interpolation-mode:bicubic;clear:both;display:block;float:none;margin:0 auto;outline:0;text-align:center;text-decoration:none;max-height:105px;max-width:105px;width:auto;height:auto" >
< / center >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / table >
< table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "40px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-size:80px;font-weight:400;hyphens:auto;line-height:80px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table > < table align = "center" class = "container main-heading float-center" style = "Margin:0 auto;background:0 0!important;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:580px" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< h1 class = "text-center" style = "Margin:0;Margin-bottom:10px;color:inherit;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:24px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:center;word-wrap:normal" > Welcome aboard John Doe< / h1 >
< / td >
< / tr >
< / tbody >
< / table >
< table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "36px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-size:40px;font-weight:400;hyphens:auto;line-height:36px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table > < table align = "center" class = "wrapper content float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "wrapper-inner" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table align = "center" class = "container" style = "Margin:0 auto;background:#fff;border-collapse:collapse;border-spacing:0;margin:0 auto;padding:0;text-align:inherit;vertical-align:top;width:580px" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" > < table class = "row description" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th class = "small-12 large-12 columns first last" style = "Margin:0 auto;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left" >
< p style = "Margin:0;Margin-bottom:10px;color:#777;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;margin-bottom:10px;padding:0;text-align:center" > Welcome to your TestCloud account, you can add, protect, and share your data.< / p >
< / th >
< th class = "expander" style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0" > < / th >
< / tr >
< / table >
< / th >
< / tr >
< / tbody >
< / table > < table class = "spacer" style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "50px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:50px;font-weight:400;hyphens:auto;line-height:50px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table >
< table align = "center" class = "row btn-group" style = "border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th class = "small-12 large-12 columns first last" style = "Margin:0 auto;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< th style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left" >
< center data-parsed = "" style = "min-width:490px;width:100%" >
<!-- [if (gte mso 9)|(IE)]>
< table >
< tr >
< td >
<![endif]-->
< table class = "button btn default primary float-center" style = "Margin:0 0 30px 0;border-collapse:collapse;border-spacing:0;display:inline-block;float:none;margin:0 0 30px 0;margin-right:15px;border-radius:8px;max-width:300px;padding:0;text-align:center;vertical-align:top;width:auto;background:#00679e;background-color:#00679e;color:#fefefe;" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border:0 solid #00679e;border-collapse:collapse!important;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< a href = "https://example.com/" style = "Margin:0;border:0 solid #00679e;color:#ffffff;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:regular;line-height:normal;margin:0;padding:8px;text-align:left;outline:1px solid #ffffff;text-decoration:none" > Go to TestCloud< / a >
< / td >
< / tr >
< / table >
< / td >
< / tr >
< / table >
<!-- [if (gte mso 9)|(IE)]>
< / td >
< td >
<![endif]-->
< table class = "button btn default secondary float-center" style = "Margin:0 0 30px 0;border-collapse:collapse;border-spacing:0;display:inline-block;float:none;background-color: #ccc;margin:0 0 30px 0;max-height:40px;max-width:300px;padding:1px;border-radius:8px;text-align:center;vertical-align:top;width:auto" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< table style = "border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border:0 solid #777;border-collapse:collapse!important;color:#fefefe;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:normal;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< a href = "https://nextcloud.com/install/#install-clients" style = "Margin:0;background-color:#fff;border:0 solid #777;color:#6C6C6C!important;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:regular;line-height:normal;margin:0;border-radius: 7px;padding:8px;text-align:left;text-decoration:none" > Install Client< / a >
< / td >
< / tr >
< / table >
< / td >
< / tr >
< / table >
<!-- [if (gte mso 9)|(IE)]>
< / td >
< / tr >
< / table >
<![endif]-->
< / center >
< / th >
< th class = "expander" style = "Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0" > < / th >
< / tr >
< / table >
< / th >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / tbody >
< / table >
< / td >
< / tr >
< / table > < table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "60px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:60px;font-weight:400;hyphens:auto;line-height:60px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table >
< table align = "center" class = "wrapper footer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td class = "wrapper-inner" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >
< center data-parsed = "" style = "min-width:580px;width:100%" >
< table class = "spacer float-center" style = "Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%" >
< tbody >
< tr style = "padding:0;text-align:left;vertical-align:top" >
< td height = "15px" style = "-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:15px;font-weight:400;hyphens:auto;line-height:15px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word" >   < / td >
< / tr >
< / tbody >
< / table >
< p class = "text-center float-center" align = "center" style = "Margin:0;Margin-bottom:10px;color:#C8C8C8;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:12px;font-weight:400;line-height:16px;margin:0;margin-bottom:10px;padding:0;text-align:center" > TestCloud< br > This is an automatically sent email, please do not reply.< / p >
< / center >
< / td >
< / tr >
< / table > < / center >
< / td >
< / tr >
< / table >
<!-- prevent Gmail on iOS font size manipulation -->
< div style = "display:none;white-space:nowrap;font:15px courier;line-height:0" > < / div >
< / body >
< / html >
EOF;
$expectedTextBody = < < < EOF
Welcome aboard John Doe
Welcome to your TestCloud account, you can add, protect, and share your data.
Go to TestCloud: https://example.com/
Install Client: https://nextcloud.com/install/#install-clients
EOF;
$expectedTextBody .= "\n-- \n";
$expectedTextBody .= < < < EOF
TestCloud
This is an automatically sent email, please do not reply.
EOF;
$result = $this->newUserMailHelper->generateTemplate($user, false);
$this->assertEquals($expectedHtmlBody, $result->renderHtml());
$this->assertEquals($expectedTextBody, $result->renderText());
$this->assertSame('OC\Mail\EMailTemplate', get_class($result));
}
public function testSendMail(): void {
/** @var IUser& MockObject $user */
$user = $this->createMock(IUser::class);
$user
->expects($this->once())
->method('getEMailAddress')
->willReturn('recipient@example.com');
$user
->expects($this->once())
->method('getDisplayName')
->willReturn('John Doe');
/** @var IEMailTemplate& MockObject $emailTemplate */
$emailTemplate = $this->createMock(IEMailTemplate::class);
$message = $this->createMock(Message::class);
$message
->expects($this->once())
->method('setTo')
->with(['recipient@example.com' => 'John Doe']);
$message
->expects($this->once())
->method('setFrom')
->with(['no-reply@nextcloud.com' => 'TestCloud']);
$message
->expects($this->once())
->method('useTemplate')
->with($emailTemplate);
$message
->expects($this->once())
->method('setAutoSubmitted')
->with(AutoSubmitted::VALUE_AUTO_GENERATED);
$this->defaults
->expects($this->once())
->method('getName')
->willReturn('TestCloud');
$this->mailer
->expects($this->once())
->method('createMessage')
->willReturn($message);
$this->newUserMailHelper->sendMail($user, $emailTemplate);
}
}