Commit 6a5948df authored by Ad Schellevis's avatar Ad Schellevis

(unittests) add versioning and migrations to unittests

parent 65396881
......@@ -30,6 +30,10 @@ namespace tests\OPNsense\Base\BaseModel;
use OPNsense\Base\BaseModel;
require_once 'migrations/M0_0_1.php';
require_once 'migrations/M1_0_0.php';
require_once 'migrations/M1_0_1.php';
/**
* Class TestModel
*/
......
<model>
<mount>//tests/OPNsense/TestModel</mount>
<version>1.0.0</version>
<description>
OPNsense RecursiveModel test
</description>
......
<?php
/**
* Copyright (C) 2016 Deciso B.V.
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
namespace tests\OPNsense\Base\BaseModel\migrations;
use OPNsense\Base\BaseModelMigration;
class M0_0_1 extends BaseModelMigration
{
public function run($model)
{
$current_value = (string)$model->general->FromEmail;
$model->general->FromEmail = "001_" . $current_value;
}
}
\ No newline at end of file
<?php
/**
* Copyright (C) 2016 Deciso B.V.
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
namespace tests\OPNsense\Base\BaseModel\migrations;
use OPNsense\Base\BaseModelMigration;
class M1_0_0 extends BaseModelMigration
{
public function run($model)
{
$current_value = (string)$model->general->FromEmail;
$model->general->FromEmail = "100_" . $current_value;
}
}
\ No newline at end of file
<?php
/**
* Copyright (C) 2016 Deciso B.V.
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
namespace tests\OPNsense\Base\BaseModel\migrations;
use OPNsense\Base\BaseModelMigration;
class M1_0_1 extends BaseModelMigration
{
public function run($model)
{
$current_value = (string)$model->general->FromEmail;
$model->general->FromEmail = "101_" . $current_value;
}
}
\ No newline at end of file
......@@ -37,6 +37,20 @@ class BaseModelTest extends \PHPUnit_Framework_TestCase
{
private static $model = null;
public function testResetConfig()
{
// reset version, force migrations
if (!empty(Config::getInstance()->object()->tests) &&
!empty(Config::getInstance()->object()->tests->OPNsense) &&
!empty(Config::getInstance()->object()->tests->OPNsense->TestModel)) {
Config::getInstance()->object()->tests->OPNsense->TestModel['version'] = '0.0.0';
Config::getInstance()->object()->tests->OPNsense->TestModel->general->FromEmail = "sample@example.com";
}
}
/**
* @depends testResetConfig
*/
public function testCanBeCreated()
{
BaseModelTest::$model = new BaseModel\TestModel();
......@@ -52,7 +66,17 @@ class BaseModelTest extends \PHPUnit_Framework_TestCase
}
/**
* @depends testGeneralAvailable
* @depends testCanBeCreated
*/
public function testRunMigrations()
{
BaseModelTest::$model->runMigrations();
// migration should have prefixed our default email address
$this->assertEquals((string)BaseModelTest::$model->general->FromEmail, '100_001_sample@example.com');
}
/**
* @depends testRunMigrations
*/
public function testCanSetStringValue()
{
......@@ -63,7 +87,7 @@ class BaseModelTest extends \PHPUnit_Framework_TestCase
/**
* @expectedException InvalidArgumentException
* @expectedExceptionMessage FromEmailXXX not an attribute of general
* @depends testGeneralAvailable
* @depends testRunMigrations
*/
public function testCannotSetNonExistingField()
{
......@@ -71,7 +95,7 @@ class BaseModelTest extends \PHPUnit_Framework_TestCase
}
/**
* @depends testGeneralAvailable
* @depends testRunMigrations
*/
public function testCanAssignArrayType()
{
......@@ -152,7 +176,7 @@ class BaseModelTest extends \PHPUnit_Framework_TestCase
}
/**
* @depends testGeneralAvailable
* @depends testRunMigrations
*/
public function testsetNodeByReferenceFound()
{
......@@ -160,7 +184,7 @@ class BaseModelTest extends \PHPUnit_Framework_TestCase
}
/**
* @depends testGeneralAvailable
* @depends testRunMigrations
*/
public function testsetNodeByReferenceNotFound()
{
......@@ -210,4 +234,5 @@ class BaseModelTest extends \PHPUnit_Framework_TestCase
$data = BaseModelTest::$model->arraytypes->item->getNodes();
$this->assertEquals(count($data), 9);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment