Skip to content
This repository has been archived by the owner on Dec 27, 2023. It is now read-only.

Commit

Permalink
Merge branch '2016.11-develop' into 2016.09
Browse files Browse the repository at this point in the history
Change-Id: I4e4a53b5c8a1eb7d1c0bb3f0c29dafbc318febd3
  • Loading branch information
pschuele committed Oct 20, 2016
2 parents 1029c21 + 01ed41a commit ba58b85
Show file tree
Hide file tree
Showing 103 changed files with 10,182 additions and 546 deletions.
1 change: 1 addition & 0 deletions tests/tine20/AllTests.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public static function suite()
$suite->addTest(Courses_AllTests::suite());
$suite->addTest(ActiveSync_AllTests::suite());
$suite->addTest(Filemanager_AllTests::suite());
$suite->addTest(MailFiler_AllTests::suite());
$suite->addTest(Projects_AllTests::suite());
$suite->addTest(HumanResources_AllTests::suite());
$suite->addTest(Inventory_AllTests::suite());
Expand Down
123 changes: 115 additions & 8 deletions tests/tine20/Felamimail/Frontend/JsonTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,9 @@ protected function tearDown()
}

Tinebase_TransactionManager::getInstance()->rollBack();

// needed to clear cache of containers
Tinebase_Container::getInstance()->resetClassCache();
}

/************************ test functions *********************************/
Expand Down Expand Up @@ -1123,22 +1126,24 @@ public function testSaveMessageWithInvalidChar()

/**
* @see 0012160: save emails in filemanager
*
* @param string $appName
*/
public function testFileMessages()
public function testFileMessages($appName = 'Filemanager')
{
$personalFilemanagerContainer = $this->_getPersonalContainer('Filemanager_Model_Node');
$personalFilemanagerContainer = $this->_getPersonalContainer($appName . '_Model_Node');
$message = $this->_sendMessage();
$path = '/' . Tinebase_Model_Container::TYPE_PERSONAL
. '/' . Tinebase_Core::getUser()->accountLoginName
. '/' . $personalFilemanagerContainer->name;
$filter = array(array(
'field' => 'id', 'operator' => 'in', 'value' => array($message['id'])
));
$result = $this->_json->fileMessages($filter, 'Filemanager', $path);
$result = $this->_json->fileMessages($filter, $appName, $path);
$this->assertTrue(isset($result['totalcount']));
$this->assertEquals(1, $result['totalcount'], 'message should be filed.' . print_r($result, true));
$this->assertEquals(1, $result['totalcount'], 'message should be filed in ' . $appName . ': ' . print_r($result, true));

// check if message exists in Filemanager
// check if message exists in $appName
$filter = new Tinebase_Model_Tree_Node_Filter(array(array(
'field' => 'path',
'operator' => 'equals',
Expand All @@ -1148,18 +1153,120 @@ public function testFileMessages()
'operator' => 'contains',
'value' => $message['subject']
)));
$emlNode = Filemanager_Controller_Node::getInstance()->search($filter)->getFirstRecord();
$nodeController = Tinebase_Core::getApplicationInstance($appName . '_Model_Node');
$emlNode = $nodeController->search($filter)->getFirstRecord();
$this->assertTrue($emlNode !== null, 'could not find eml file node');
$this->assertEquals(Tinebase_Model_Tree_Node::TYPE_FILE, $emlNode->type);
$this->assertEquals('message/rfc822', $emlNode->contenttype);
$this->assertTrue(preg_match('/[a-f0-9]{10}/', $emlNode->name) == 1, 'no message id hash in node name: ' . print_r($emlNode->toArray(), true));

$nodeWithDescription = Filemanager_Controller_Node::getInstance()->get($emlNode['id']);
$nodeWithDescription = $nodeController->get($emlNode['id']);
$this->assertTrue(isset($nodeWithDescription->description), 'description missing from node: ' . print_r($nodeWithDescription->toArray(), true));
$this->assertContains($message['received'], $nodeWithDescription->description);
$this->assertContains('aaaaaä', $nodeWithDescription->description);
}


/**
* @see 0012162: create new MailFiler application
*/
public function testFileMessagesInMailFiler()
{
$this->testFileMessages('MailFiler');

$personalFilemanagerContainer = $this->_getPersonalContainer('MailFiler_Model_Node');
$path = '/' . Tinebase_Model_Container::TYPE_PERSONAL
. '/' . Tinebase_Core::getUser()->accountLoginName
. '/' . $personalFilemanagerContainer->name;
$filter = array(array(
'field' => 'path',
'operator' => 'equals',
'value' => $path
), array(
'field' => 'subject',
'operator' => 'equals',
'value' => 'test'
));
$mailFilerJson = new MailFiler_Frontend_Json();
$emlNodes = $mailFilerJson->searchNodes($filter, array());
$this->assertGreaterThan(0, $emlNodes['totalcount'], 'could not find eml file node with subject filter');
$emlNode = $emlNodes['results'][0];

// check email fields
$this->assertTrue(isset($emlNode['message']), 'message not found in node array: ' . print_r($emlNodes['results'], true));
$this->assertEquals(array(Tinebase_Core::getUser()->accountEmailAddress), $emlNode['message']['to'], print_r($emlNode['message'], true));
$this->assertTrue(isset($emlNode['message']['structure']) && is_array($emlNode['message']['structure']), 'structure not found or not an array: ' . print_r($emlNode['message'], true));
$this->assertTrue(isset($emlNode['message']['body']) && is_string($emlNode['message']['body']), 'body not found or not a string: ' . print_r($emlNode['message'], true));
$this->assertContains('aaaaaä', $emlNode['message']['body'], print_r($emlNode['message'], true));
}

/**
* @see 0012162: create new MailFiler application
*/
public function testFileMessagesInMailFilerWithAttachment()
{
$emlNode = $this->_fileMessageInMailFiler();
$this->assertTrue(isset($emlNode['message']['attachments']), 'attachments not found in message node: ' . print_r($emlNode, true));
$this->assertEquals(1, count($emlNode['message']['attachments']), 'attachment not found in message node: ' . print_r($emlNode, true));
$this->assertEquals('moz-screenshot-83.png', $emlNode['message']['attachments'][0]['filename'], print_r($emlNode['message']['attachments'], true));
}

/**
* @param string $messageFile
* @return array
*/
protected function _fileMessageInMailFiler($messageFile = 'multipart_related.eml', $subject = 'Tine 2.0 bei Metaways - Verbessurngsvorschlag')
{
$appName = 'MailFiler';
$personalFilemanagerContainer = $this->_getPersonalContainer($appName . '_Model_Node');
$testFolder = $this->_getFolder($this->_testFolderName);
$message = fopen(dirname(__FILE__) . '/../files/' . $messageFile, 'r');
Felamimail_Controller_Message::getInstance()->appendMessage($testFolder, $message);

$message = $this->_searchForMessageBySubject($subject, $this->_testFolderName);
$path = '/' . Tinebase_Model_Container::TYPE_PERSONAL
. '/' . Tinebase_Core::getUser()->accountLoginName
. '/' . $personalFilemanagerContainer->name;
$filter = array(array(
'field' => 'id', 'operator' => 'in', 'value' => array($message['id'])
));
$this->_json->fileMessages($filter, $appName, $path);
$filter = array(array(
'field' => 'path',
'operator' => 'equals',
'value' => $path
), array(
'field' => 'subject',
'operator' => 'equals',
'value' => $message['subject']
));
$mailFilerJson = new MailFiler_Frontend_Json();
$emlNodes = $mailFilerJson->searchNodes($filter, array());
$this->assertGreaterThan(0, $emlNodes['totalcount'], 'could not find eml file node with subject filter');
$emlNode = $emlNodes['results'][0];

return $emlNode;
}

/**
* @see 0012162: create new MailFiler application
*/
public function testFileMessagesInMailFilerWithSingleBodyPart()
{
$emlNode = $this->_fileMessageInMailFiler('tine20_alarm_notifictation.eml', 'Alarm for event "ssss" at Oct 12, 2016 4:00:00 PM');
$this->assertContains('Event details', $emlNode['message']['body'], print_r($emlNode['message'], true));
}

/**
* @see 0012162: create new MailFiler application
*/
public function testFileMessageWithDelete()
{
$emlNode = $this->_fileMessageInMailFiler();
$mailFilerJson = new MailFiler_Frontend_Json();
$result = $mailFilerJson->deleteNodes(array($emlNode['path']));
self::assertEquals('success', $result['status']);
}

/**
* testMessageWithInvalidICS
*
Expand Down
27 changes: 27 additions & 0 deletions tests/tine20/Felamimail/files/tine20_alarm_notifictation.eml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
Return-Path: <noreply@example.org>
Delivered-To: vagrant@example.org
Received: from localhost (localhost [127.0.0.1])
(using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
(No client certificate requested)
by vagrant-ubuntu-trusty-32 (Postfix) with ESMTPS id E16BF419C9
for <vagrant@example.org>; Wed, 12 Oct 2016 13:53:06 +0000 (UTC)
Subject: Alarm for event "ssss" at Oct 12, 2016 4:00:00 PM
X-Tine20-Type: Notification
Precedence: bulk
User-Agent: Tine 2.0 Notification Service(version 12162: 00bc36b852154705a7fac1b892295f4d1ff02317 (2016-10-12 08:39:27) - none)
From: "vagrant" <vagrant@example.org>
Sender: "Tine 2.0 notification service" <noreply@example.org>
To: "vagrant Test" <vagrant@example.org>
Message-Id: <a9a3697ca976383547057332b1fa128a14d333f0@vagrant-ubuntu-trusty-32>
X-MailGenerator: Tine 2.0
X-Tine20TestMessage: tine20_alarm_notifictation.eml
Date: Wed, 12 Oct 2016 13:53:06 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
MIME-Version: 1.0

Event details:=0AStart: Wednesday, Oct 12, 2016 4:00:00 PM=
=0AEnd: Wednesday, Oct 12, 2016 5:00:00 PM=0ASummary: =
ssss=0ADescription: dfvsdvsfdv=0AAttender:=0A Test, v=
agrant (Required, Accepted) =0A=0A
24 changes: 24 additions & 0 deletions tests/tine20/MailFiler/AllTests.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php
/**
* Tine 2.0 - http://www.tine20.org
*
* @package MailFiler
* @license http://www.gnu.org/licenses/agpl.html
* @copyright Copyright (c) 2010-2016 Metaways Infosystems GmbH (http://www.metaways.de)
* @author Philipp Schüle <p.schuele@metaways.de>
*/
class MailFiler_AllTests
{
public static function main ()
{
PHPUnit_TextUI_TestRunner::run(self::suite());
}

public static function suite ()
{
$suite = new PHPUnit_Framework_TestSuite('Tine 2.0 MailFiler All Tests');
$suite->addTestSuite('MailFiler_Frontend_AllTests');

return $suite;
}
}
24 changes: 24 additions & 0 deletions tests/tine20/MailFiler/Frontend/AllTests.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php
/**
* Tine 2.0 - http://www.tine20.org
*
* @package MailFiler
* @license http://www.gnu.org/licenses/agpl.html
* @copyright Copyright (c) 2012-2016 Metaways Infosystems GmbH (http://www.metaways.de)
* @author Philipp Schüle <p.schuele@metaways.de>
*/
class MailFiler_Frontend_AllTests
{
public static function main ()
{
PHPUnit_TextUI_TestRunner::run(self::suite());
}

public static function suite ()
{
$suite = new PHPUnit_Framework_TestSuite('Tine 2.0 MailFiler Frontend Tests');
$suite->addTestSuite('MailFiler_Frontend_JsonTests');

return $suite;
}
}
119 changes: 119 additions & 0 deletions tests/tine20/MailFiler/Frontend/JsonTests.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
<?php
/**
* Tine 2.0 - http://www.tine20.org
*
* @package MailFiler
* @license http://www.gnu.org/licenses/agpl.html
* @copyright Copyright (c) 2011-2016 Metaways Infosystems GmbH (http://www.metaways.de)
* @author Philipp Schüle <p.schuele@metaways.de>
*
*/

/**
* Test class for MailFiler_Frontend_Json
*
* @package MailFiler
*/
class MailFiler_Frontend_JsonTests extends TestCase
{
/**
* uit
*
* @var MailFiler_Frontend_Json
*/
protected $_json;

/**
* Sets up the fixture.
* This method is called before a test is executed.
*
* @access protected
*/
protected function setUp()
{
parent::setUp();

$this->_json = new MailFiler_Frontend_Json();
}

/**
* Tears down the fixture
* This method is called after a test is executed.
*
* @access protected
*/
protected function tearDown()
{
parent::tearDown();

Tinebase_FileSystem::getInstance()->clearStatCache();
Tinebase_FileSystem::getInstance()->clearDeletedFilesFromFilesystem();
}

/**
* test search nodes (personal)
*/
public function testSearchWithMessageFilter()
{
$filter = array(array(
'field' => 'path',
'operator' => 'equals',
'value' => '/'
), array(
'field' => 'to',
'operator' => 'contains',
'value' => 'vagrant'
));
$result = $this->_json->searchNodes($filter, array());
self::assertEquals(2, count($result['filter']));
// TODO is it correct to show the root nodes even if "to" filter is set?
self::assertEquals(3, $result['totalcount']);
}

/**
* create container in personal folder
*
* @return array created node
*/
public function testCreateContainerNodeInPersonalFolder($containerName = 'testcontainer')
{
$testPath = '/' . Tinebase_Model_Container::TYPE_PERSONAL . '/' . Tinebase_Core::getUser()->accountLoginName . '/' . $containerName;
$result = $this->_json->createNodes($testPath, Tinebase_Model_Tree_Node::TYPE_FOLDER, array(), FALSE);
$createdNode = $result[0];

$this->_objects['containerids'][] = $createdNode['name']['id'];

self::assertTrue(is_array($createdNode['name']));
self::assertEquals($containerName, $createdNode['name']['name']);
self::assertEquals(Tinebase_Core::getUser()->getId(), $createdNode['created_by']['accountId']);

return $createdNode;
}

/**
* test move eml node
*/
public function testMoveNode()
{
$node1 = $this->testCreateContainerNodeInPersonalFolder('testcontainer1');
$node2 = $this->testCreateContainerNodeInPersonalFolder('testcontainer2');

$tempFilename = Tinebase_TempFile::getTempPath();
file_put_contents($tempFilename, 'my eml content');
$tempFile = Tinebase_TempFile::getInstance()->createTempFile($tempFilename);
$filePath = $node1['path'] . '/my.eml';
MailFiler_Controller_Node::getInstance()->createNodes(
array($filePath),
Tinebase_Model_Tree_Node::TYPE_FILE,
array($tempFile->getId()),
/* $_forceOverwrite */ true
)->getFirstRecord();

// move to testcontainer2
$targetFilePath = $node2['path'] . '/my.eml';
$result = $this->_json->moveNodes(array($filePath), array($targetFilePath), FALSE);

self::assertEquals(1, count($result));
self::assertEquals($targetFilePath, $result[0]['path']);
}
}
Loading

0 comments on commit ba58b85

Please sign in to comment.