added project start and end date (#1303)
* added sortable js library * activity in invoice is optional * added javascript widget for paginated boxes * fix activity dropdown for globals only * added timesheet service to reduce code duplication * use repository to query for teams in dropdowns * added project validator * validate project start and end against timesheet * include begin and end in dynamic form requests for projects * added timezone and language option to import flag, improve timesheet import speed * deactivate cross-timezone filter * add virtual fields to field order list * composer update * added param to ignore dates * position loader icon fixed - fixes #1330 * permission problem when creating a new project - fixes #1340 * remove dev dependencies webserver and thanks bundle * stop information leak (begin and end date) in duration mode - fixes #1307 * unify timesheet edit dialog for user and admins * fix security issue, own rates exposed to unauthorized users in multi-update dialog
This commit is contained in:
@@ -12,7 +12,7 @@ namespace App\Tests\Repository\Query;
|
||||
use App\Entity\Customer;
|
||||
use App\Entity\Project;
|
||||
use App\Repository\Query\ActivityQuery;
|
||||
use App\Repository\Query\VisibilityQuery;
|
||||
use App\Repository\Query\VisibilityInterface;
|
||||
|
||||
/**
|
||||
* @covers \App\Repository\Query\ActivityQuery
|
||||
@@ -24,7 +24,7 @@ class ActivityQueryTest extends BaseQueryTest
|
||||
$sut = new ActivityQuery();
|
||||
|
||||
$this->assertBaseQuery($sut, 'name');
|
||||
$this->assertInstanceOf(VisibilityQuery::class, $sut);
|
||||
$this->assertInstanceOf(VisibilityInterface::class, $sut);
|
||||
|
||||
$this->assertNull($sut->getCustomer());
|
||||
$this->assertNull($sut->getProject());
|
||||
|
||||
@@ -31,7 +31,7 @@ class BaseQueryTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedDeprecation BaseQuery::getResultType() is deprecated and will be removed with 1.6
|
||||
* @expectedDeprecation BaseQuery::getResultType() is deprecated and will be removed with 2.0
|
||||
* @group legacy
|
||||
*/
|
||||
public function testDeprecations()
|
||||
@@ -100,6 +100,16 @@ class BaseQueryTest extends TestCase
|
||||
|
||||
self::assertInstanceOf(BaseQuery::class, $sut->addTeam(new Team()));
|
||||
self::assertEquals(1, count($sut->getTeams()));
|
||||
|
||||
$sut->setTeams(null);
|
||||
self::assertEmpty($sut->getTeams());
|
||||
$sut->setTeams([]);
|
||||
self::assertEmpty($sut->getTeams());
|
||||
|
||||
$team = new Team();
|
||||
self::assertInstanceOf(BaseQuery::class, $sut->setTeams([$team]));
|
||||
self::assertEquals(1, count($sut->getTeams()));
|
||||
self::assertSame($team, $sut->getTeams()[0]);
|
||||
}
|
||||
|
||||
protected function assertPage(BaseQuery $sut)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
namespace App\Tests\Repository\Query;
|
||||
|
||||
use App\Repository\Query\CustomerQuery;
|
||||
use App\Repository\Query\VisibilityQuery;
|
||||
use App\Repository\Query\VisibilityInterface;
|
||||
|
||||
/**
|
||||
* @covers \App\Repository\Query\CustomerQuery
|
||||
@@ -22,7 +22,7 @@ class CustomerQueryTest extends BaseQueryTest
|
||||
$sut = new CustomerQuery();
|
||||
|
||||
$this->assertBaseQuery($sut, 'name');
|
||||
$this->assertInstanceOf(VisibilityQuery::class, $sut);
|
||||
$this->assertInstanceOf(VisibilityInterface::class, $sut);
|
||||
|
||||
$this->assertResetByFormError(new CustomerQuery(), 'name');
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace App\Tests\Repository\Query;
|
||||
|
||||
use App\Entity\Customer;
|
||||
use App\Repository\Query\ProjectQuery;
|
||||
use App\Repository\Query\VisibilityQuery;
|
||||
use App\Repository\Query\VisibilityInterface;
|
||||
|
||||
/**
|
||||
* @covers \App\Repository\Query\ProjectQuery
|
||||
@@ -23,7 +23,7 @@ class ProjectQueryTest extends BaseQueryTest
|
||||
$sut = new ProjectQuery();
|
||||
|
||||
$this->assertBaseQuery($sut, 'name');
|
||||
$this->assertInstanceOf(VisibilityQuery::class, $sut);
|
||||
$this->assertInstanceOf(VisibilityInterface::class, $sut);
|
||||
|
||||
$this->assertNull($sut->getCustomer());
|
||||
|
||||
@@ -38,5 +38,21 @@ class ProjectQueryTest extends BaseQueryTest
|
||||
$this->assertEquals(99, $sut->getCustomer());
|
||||
|
||||
$this->assertResetByFormError(new ProjectQuery(), 'name');
|
||||
|
||||
self::assertNull($sut->getProjectStart());
|
||||
self::assertNull($sut->getProjectEnd());
|
||||
}
|
||||
|
||||
public function testSetter()
|
||||
{
|
||||
$sut = new ProjectQuery();
|
||||
|
||||
$start = new \DateTime();
|
||||
$sut->setProjectStart($start);
|
||||
self::assertSame($start, $sut->getProjectStart());
|
||||
|
||||
$end = new \DateTime('-1 day');
|
||||
$sut->setProjectEnd($end);
|
||||
self::assertSame($end, $sut->getProjectEnd());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
namespace App\Tests\Repository\Query;
|
||||
|
||||
use App\Repository\Query\UserQuery;
|
||||
use App\Repository\Query\VisibilityQuery;
|
||||
use App\Repository\Query\VisibilityInterface;
|
||||
|
||||
/**
|
||||
* @covers \App\Repository\Query\UserQuery
|
||||
@@ -21,7 +21,7 @@ class UserQueryTest extends BaseQueryTest
|
||||
{
|
||||
$sut = new UserQuery();
|
||||
$this->assertBaseQuery($sut, 'username');
|
||||
$this->assertInstanceOf(VisibilityQuery::class, $sut);
|
||||
$this->assertInstanceOf(VisibilityInterface::class, $sut);
|
||||
$this->assertRole($sut);
|
||||
|
||||
$this->assertResetByFormError(new UserQuery(), 'username');
|
||||
|
||||
@@ -9,11 +9,14 @@
|
||||
|
||||
namespace App\Tests\Repository\Query;
|
||||
|
||||
use App\Repository\Query\VisibilityInterface;
|
||||
use App\Repository\Query\VisibilityQuery;
|
||||
use App\Repository\Query\VisibilityTrait;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @covers \App\Repository\Query\VisibilityQuery
|
||||
* @covers \App\Repository\Query\VisibilityTrait
|
||||
*/
|
||||
class VisibilityQueryTest extends TestCase
|
||||
{
|
||||
@@ -41,4 +44,34 @@ class VisibilityQueryTest extends TestCase
|
||||
$sut->setVisibility(VisibilityQuery::SHOW_VISIBLE);
|
||||
$this->assertEquals(VisibilityQuery::SHOW_VISIBLE, $sut->getVisibility());
|
||||
}
|
||||
|
||||
public function testVisibilityTrait()
|
||||
{
|
||||
$sut = new VisibilityTraitImpl();
|
||||
|
||||
$this->assertEquals(VisibilityInterface::SHOW_VISIBLE, $sut->getVisibility());
|
||||
|
||||
$sut->setVisibility('foo-bar');
|
||||
$this->assertEquals(VisibilityInterface::SHOW_VISIBLE, $sut->getVisibility());
|
||||
|
||||
$sut->setVisibility('2');
|
||||
$this->assertEquals(VisibilityInterface::SHOW_HIDDEN, $sut->getVisibility());
|
||||
|
||||
$sut->setVisibility('0'); // keep the value that was previously set
|
||||
$this->assertEquals(VisibilityInterface::SHOW_HIDDEN, $sut->getVisibility());
|
||||
|
||||
$sut->setVisibility(VisibilityInterface::SHOW_BOTH);
|
||||
$this->assertEquals(VisibilityInterface::SHOW_BOTH, $sut->getVisibility());
|
||||
|
||||
$sut->setVisibility(VisibilityInterface::SHOW_HIDDEN);
|
||||
$this->assertEquals(VisibilityInterface::SHOW_HIDDEN, $sut->getVisibility());
|
||||
|
||||
$sut->setVisibility(VisibilityInterface::SHOW_VISIBLE);
|
||||
$this->assertEquals(VisibilityInterface::SHOW_VISIBLE, $sut->getVisibility());
|
||||
}
|
||||
}
|
||||
|
||||
class VisibilityTraitImpl implements VisibilityInterface
|
||||
{
|
||||
use VisibilityTrait;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user