mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-08-16 20:22:15 +01:00
Fixed bugs causing incorrect computed attributes in imported data
This commit is contained in:
@@ -7,12 +7,13 @@ namespace App\Jobs;
|
|||||||
use App\Models\Project;
|
use App\Models\Project;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Events\ShouldDispatchAfterCommit;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
use Illuminate\Foundation\Bus\Dispatchable;
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
class RecalculateSpentTimeForProject implements ShouldQueue
|
class RecalculateSpentTimeForProject implements ShouldDispatchAfterCommit, ShouldQueue
|
||||||
{
|
{
|
||||||
use Dispatchable;
|
use Dispatchable;
|
||||||
use InteractsWithQueue;
|
use InteractsWithQueue;
|
||||||
|
|||||||
@@ -7,12 +7,13 @@ namespace App\Jobs;
|
|||||||
use App\Models\Task;
|
use App\Models\Task;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Events\ShouldDispatchAfterCommit;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
use Illuminate\Foundation\Bus\Dispatchable;
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
class RecalculateSpentTimeForTask implements ShouldQueue
|
class RecalculateSpentTimeForTask implements ShouldDispatchAfterCommit, ShouldQueue
|
||||||
{
|
{
|
||||||
use Dispatchable;
|
use Dispatchable;
|
||||||
use InteractsWithQueue;
|
use InteractsWithQueue;
|
||||||
|
|||||||
@@ -188,6 +188,17 @@ class ImportDatabaseHelper
|
|||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array<TModel>
|
||||||
|
*/
|
||||||
|
public function getCachedModels(): array
|
||||||
|
{
|
||||||
|
if ($this->mapKeyToModel === null) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return array_values($this->mapKeyToModel);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array<string, mixed> $identifierData
|
* @param array<string, mixed> $identifierData
|
||||||
* @return TModel|null
|
* @return TModel|null
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ declare(strict_types=1);
|
|||||||
namespace App\Service\Import\Importers;
|
namespace App\Service\Import\Importers;
|
||||||
|
|
||||||
use App\Enums\Role;
|
use App\Enums\Role;
|
||||||
|
use App\Jobs\RecalculateSpentTimeForProject;
|
||||||
|
use App\Jobs\RecalculateSpentTimeForTask;
|
||||||
use App\Models\TimeEntry;
|
use App\Models\TimeEntry;
|
||||||
use Carbon\Exceptions\InvalidFormatException;
|
use Carbon\Exceptions\InvalidFormatException;
|
||||||
use Exception;
|
use Exception;
|
||||||
@@ -99,6 +101,7 @@ class ClockifyTimeEntriesImporter extends DefaultImporter
|
|||||||
'project_id' => $projectId,
|
'project_id' => $projectId,
|
||||||
'organization_id' => $this->organization->id,
|
'organization_id' => $this->organization->id,
|
||||||
]);
|
]);
|
||||||
|
$this->taskImportHelper->getModelById($taskId);
|
||||||
}
|
}
|
||||||
$timeEntry = new TimeEntry;
|
$timeEntry = new TimeEntry;
|
||||||
$timeEntry->disableAuditing();
|
$timeEntry->disableAuditing();
|
||||||
@@ -158,6 +161,12 @@ class ClockifyTimeEntriesImporter extends DefaultImporter
|
|||||||
$timeEntry->save();
|
$timeEntry->save();
|
||||||
$this->timeEntriesCreated++;
|
$this->timeEntriesCreated++;
|
||||||
}
|
}
|
||||||
|
foreach ($this->projectImportHelper->getCachedModels() as $usedProject) {
|
||||||
|
RecalculateSpentTimeForProject::dispatch($usedProject);
|
||||||
|
}
|
||||||
|
foreach ($this->taskImportHelper->getCachedModels() as $usedTask) {
|
||||||
|
RecalculateSpentTimeForTask::dispatch($usedTask);
|
||||||
|
}
|
||||||
} catch (ImportException $exception) {
|
} catch (ImportException $exception) {
|
||||||
throw $exception;
|
throw $exception;
|
||||||
} catch (CsvException $exception) {
|
} catch (CsvException $exception) {
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ declare(strict_types=1);
|
|||||||
namespace App\Service\Import\Importers;
|
namespace App\Service\Import\Importers;
|
||||||
|
|
||||||
use App\Enums\Role;
|
use App\Enums\Role;
|
||||||
|
use App\Jobs\RecalculateSpentTimeForProject;
|
||||||
|
use App\Jobs\RecalculateSpentTimeForTask;
|
||||||
use App\Models\TimeEntry;
|
use App\Models\TimeEntry;
|
||||||
use Carbon\Exceptions\InvalidFormatException;
|
use Carbon\Exceptions\InvalidFormatException;
|
||||||
use Exception;
|
use Exception;
|
||||||
@@ -235,6 +237,7 @@ class SolidtimeImporter extends DefaultImporter
|
|||||||
$taskId = null;
|
$taskId = null;
|
||||||
if ($timeEntryRow['task_id'] !== '') {
|
if ($timeEntryRow['task_id'] !== '') {
|
||||||
$taskId = $this->taskImportHelper->getKeyByExternalIdentifier($timeEntryRow['task_id']);
|
$taskId = $this->taskImportHelper->getKeyByExternalIdentifier($timeEntryRow['task_id']);
|
||||||
|
$this->taskImportHelper->getModelById($taskId);
|
||||||
}
|
}
|
||||||
$timeEntry = new TimeEntry;
|
$timeEntry = new TimeEntry;
|
||||||
$timeEntry->disableAuditing();
|
$timeEntry->disableAuditing();
|
||||||
@@ -303,6 +306,12 @@ class SolidtimeImporter extends DefaultImporter
|
|||||||
$timeEntry->save();
|
$timeEntry->save();
|
||||||
$this->timeEntriesCreated++;
|
$this->timeEntriesCreated++;
|
||||||
}
|
}
|
||||||
|
foreach ($this->projectImportHelper->getCachedModels() as $usedProject) {
|
||||||
|
RecalculateSpentTimeForProject::dispatch($usedProject);
|
||||||
|
}
|
||||||
|
foreach ($this->taskImportHelper->getCachedModels() as $usedTask) {
|
||||||
|
RecalculateSpentTimeForTask::dispatch($usedTask);
|
||||||
|
}
|
||||||
} catch (ImportException $exception) {
|
} catch (ImportException $exception) {
|
||||||
throw $exception;
|
throw $exception;
|
||||||
} catch (Exception $exception) {
|
} catch (Exception $exception) {
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ declare(strict_types=1);
|
|||||||
namespace App\Service\Import\Importers;
|
namespace App\Service\Import\Importers;
|
||||||
|
|
||||||
use App\Enums\Role;
|
use App\Enums\Role;
|
||||||
|
use App\Jobs\RecalculateSpentTimeForProject;
|
||||||
|
use App\Jobs\RecalculateSpentTimeForTask;
|
||||||
use App\Models\TimeEntry;
|
use App\Models\TimeEntry;
|
||||||
use Carbon\Exceptions\InvalidFormatException;
|
use Carbon\Exceptions\InvalidFormatException;
|
||||||
use Exception;
|
use Exception;
|
||||||
@@ -99,6 +101,7 @@ class TogglTimeEntriesImporter extends DefaultImporter
|
|||||||
'project_id' => $projectId,
|
'project_id' => $projectId,
|
||||||
'organization_id' => $this->organization->id,
|
'organization_id' => $this->organization->id,
|
||||||
]);
|
]);
|
||||||
|
$this->taskImportHelper->getModelById($taskId);
|
||||||
}
|
}
|
||||||
$timeEntry = new TimeEntry;
|
$timeEntry = new TimeEntry;
|
||||||
$timeEntry->disableAuditing();
|
$timeEntry->disableAuditing();
|
||||||
@@ -144,6 +147,12 @@ class TogglTimeEntriesImporter extends DefaultImporter
|
|||||||
$timeEntry->save();
|
$timeEntry->save();
|
||||||
$this->timeEntriesCreated++;
|
$this->timeEntriesCreated++;
|
||||||
}
|
}
|
||||||
|
foreach ($this->projectImportHelper->getCachedModels() as $usedProject) {
|
||||||
|
RecalculateSpentTimeForProject::dispatch($usedProject);
|
||||||
|
}
|
||||||
|
foreach ($this->taskImportHelper->getCachedModels() as $usedTask) {
|
||||||
|
RecalculateSpentTimeForTask::dispatch($usedTask);
|
||||||
|
}
|
||||||
} catch (ImportException $exception) {
|
} catch (ImportException $exception) {
|
||||||
throw $exception;
|
throw $exception;
|
||||||
} catch (CsvException $exception) {
|
} catch (CsvException $exception) {
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
id,description,start,end,billable_rate,billable,member_id,user_id,organization_id,client_id,project_id,task_id,tags,is_imported,still_active_email_sent_at,created_at,updated_at
|
id,description,start,end,billable_rate,billable,member_id,user_id,organization_id,client_id,project_id,task_id,tags,is_imported,still_active_email_sent_at,created_at,updated_at
|
||||||
00aae3be-18fc-462d-bee4-350fb605b2f3,,2024-03-04T09:23:52Z,2024-03-04T09:23:52Z,,false,06e6e605-86bd-417b-b75d-02f671e5d520,0446cdd8-3ad1-43d6-9231-9e0dc4eeb71c,ee5a8cd6-312f-4ae6-b044-e2014f09ecc2,,,,"[""2c5c2da7-9ef8-4410-bb8f-6e0a90f9d2c7"",""bf6c0ac5-2587-474b-8983-40bb3ea8002f""]",false,,2024-08-22T10:36:48Z,2024-08-22T10:36:48Z
|
00aae3be-18fc-462d-bee4-350fb605b2f3,,2024-03-04T09:23:52Z,2024-03-04T09:23:52Z,,false,06e6e605-86bd-417b-b75d-02f671e5d520,0446cdd8-3ad1-43d6-9231-9e0dc4eeb71c,ee5a8cd6-312f-4ae6-b044-e2014f09ecc2,,,,"[""2c5c2da7-9ef8-4410-bb8f-6e0a90f9d2c7"",""bf6c0ac5-2587-474b-8983-40bb3ea8002f""]",false,,2024-08-22T10:36:48Z,2024-08-22T10:36:48Z
|
||||||
1c7a905d-aa12-4d08-bc41-7e92577e7cdf,"Working hard",2024-03-04T09:23:00Z,2024-03-04T10:23:01Z,,true,06e6e605-86bd-417b-b75d-02f671e5d520,0446cdd8-3ad1-43d6-9231-9e0dc4eeb71c,ee5a8cd6-312f-4ae6-b044-e2014f09ecc2,,,,[],false,,2024-08-22T10:36:48Z,2024-08-22T10:36:48Z
|
1c7a905d-aa12-4d08-bc41-7e92577e7cdf,"Working hard",2024-03-04T09:23:00Z,2024-03-04T10:23:01Z,,true,06e6e605-86bd-417b-b75d-02f671e5d520,0446cdd8-3ad1-43d6-9231-9e0dc4eeb71c,ee5a8cd6-312f-4ae6-b044-e2014f09ecc2,b4187a44-41f4-46d7-8460-f15a25b3aad6,06e79ec4-33f8-4730-804c-d03c014991d1,b49688a0-94f3-4cb3-9ca1-5003de955fb0,[],false,,2024-08-22T10:36:48Z,2024-08-22T10:36:48Z
|
||||||
|
|||||||
|
@@ -4,11 +4,15 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Tests\Unit\Service\Import\Importers;
|
namespace Tests\Unit\Service\Import\Importers;
|
||||||
|
|
||||||
|
use App\Jobs\RecalculateSpentTimeForProject;
|
||||||
|
use App\Jobs\RecalculateSpentTimeForTask;
|
||||||
use App\Models\Organization;
|
use App\Models\Organization;
|
||||||
use App\Service\Import\Importers\DefaultImporter;
|
use App\Service\Import\Importers\DefaultImporter;
|
||||||
use App\Service\Import\Importers\ImportException;
|
use App\Service\Import\Importers\ImportException;
|
||||||
use App\Service\Import\Importers\SolidtimeImporter;
|
use App\Service\Import\Importers\SolidtimeImporter;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Queue;
|
||||||
use PHPUnit\Framework\Attributes\CoversClass;
|
use PHPUnit\Framework\Attributes\CoversClass;
|
||||||
use PHPUnit\Framework\Attributes\UsesClass;
|
use PHPUnit\Framework\Attributes\UsesClass;
|
||||||
|
|
||||||
@@ -47,12 +51,20 @@ class SolidtimeImporterTest extends ImporterTestAbstract
|
|||||||
$importer = new SolidtimeImporter;
|
$importer = new SolidtimeImporter;
|
||||||
$importer->init($organization);
|
$importer->init($organization);
|
||||||
$data = file_get_contents($zipPath);
|
$data = file_get_contents($zipPath);
|
||||||
|
Queue::fake([
|
||||||
|
RecalculateSpentTimeForProject::class,
|
||||||
|
RecalculateSpentTimeForTask::class,
|
||||||
|
]);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
DB::enableQueryLog();
|
||||||
|
DB::flushQueryLog();
|
||||||
$importer->importData($data, $timezone);
|
$importer->importData($data, $timezone);
|
||||||
$report = $importer->getReport();
|
$report = $importer->getReport();
|
||||||
|
$queryLog = DB::getQueryLog();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
$this->assertCount(25, $queryLog);
|
||||||
$testScenario = $this->checkTestScenarioAfterImportExcludingTimeEntries(true);
|
$testScenario = $this->checkTestScenarioAfterImportExcludingTimeEntries(true);
|
||||||
$this->checkTimeEntries($testScenario);
|
$this->checkTimeEntries($testScenario);
|
||||||
$this->assertSame(2, $report->timeEntriesCreated);
|
$this->assertSame(2, $report->timeEntriesCreated);
|
||||||
@@ -61,6 +73,8 @@ class SolidtimeImporterTest extends ImporterTestAbstract
|
|||||||
$this->assertSame(1, $report->usersCreated);
|
$this->assertSame(1, $report->usersCreated);
|
||||||
$this->assertSame(3, $report->projectsCreated);
|
$this->assertSame(3, $report->projectsCreated);
|
||||||
$this->assertSame(2, $report->clientsCreated);
|
$this->assertSame(2, $report->clientsCreated);
|
||||||
|
Queue::assertPushed(RecalculateSpentTimeForProject::class, 1);
|
||||||
|
Queue::assertPushed(RecalculateSpentTimeForTask::class, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_import_of_test_file_twice_succeeds(): void
|
public function test_import_of_test_file_twice_succeeds(): void
|
||||||
@@ -75,12 +89,20 @@ class SolidtimeImporterTest extends ImporterTestAbstract
|
|||||||
$importer->importData($data, $timezone);
|
$importer->importData($data, $timezone);
|
||||||
$importer = new SolidtimeImporter;
|
$importer = new SolidtimeImporter;
|
||||||
$importer->init($organization);
|
$importer->init($organization);
|
||||||
|
Queue::fake([
|
||||||
|
RecalculateSpentTimeForProject::class,
|
||||||
|
RecalculateSpentTimeForTask::class,
|
||||||
|
]);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
DB::enableQueryLog();
|
||||||
|
DB::flushQueryLog();
|
||||||
$importer->importData($data, $timezone);
|
$importer->importData($data, $timezone);
|
||||||
$report = $importer->getReport();
|
$report = $importer->getReport();
|
||||||
|
$queryLog = DB::getQueryLog();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
$this->assertCount(13, $queryLog);
|
||||||
$testScenario = $this->checkTestScenarioAfterImportExcludingTimeEntries(true);
|
$testScenario = $this->checkTestScenarioAfterImportExcludingTimeEntries(true);
|
||||||
$this->checkTimeEntries($testScenario, true);
|
$this->checkTimeEntries($testScenario, true);
|
||||||
$this->assertSame(2, $report->timeEntriesCreated);
|
$this->assertSame(2, $report->timeEntriesCreated);
|
||||||
@@ -89,5 +111,7 @@ class SolidtimeImporterTest extends ImporterTestAbstract
|
|||||||
$this->assertSame(0, $report->usersCreated);
|
$this->assertSame(0, $report->usersCreated);
|
||||||
$this->assertSame(0, $report->projectsCreated);
|
$this->assertSame(0, $report->projectsCreated);
|
||||||
$this->assertSame(0, $report->clientsCreated);
|
$this->assertSame(0, $report->clientsCreated);
|
||||||
|
Queue::assertPushed(RecalculateSpentTimeForProject::class, 1);
|
||||||
|
Queue::assertPushed(RecalculateSpentTimeForTask::class, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,12 +4,15 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Tests\Unit\Service\Import\Importers;
|
namespace Tests\Unit\Service\Import\Importers;
|
||||||
|
|
||||||
|
use App\Jobs\RecalculateSpentTimeForProject;
|
||||||
|
use App\Jobs\RecalculateSpentTimeForTask;
|
||||||
use App\Models\Organization;
|
use App\Models\Organization;
|
||||||
use App\Models\TimeEntry;
|
use App\Models\TimeEntry;
|
||||||
use App\Service\Import\Importers\DefaultImporter;
|
use App\Service\Import\Importers\DefaultImporter;
|
||||||
use App\Service\Import\Importers\ImportException;
|
use App\Service\Import\Importers\ImportException;
|
||||||
use App\Service\Import\Importers\TogglTimeEntriesImporter;
|
use App\Service\Import\Importers\TogglTimeEntriesImporter;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Queue;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use PHPUnit\Framework\Attributes\CoversClass;
|
use PHPUnit\Framework\Attributes\CoversClass;
|
||||||
use PHPUnit\Framework\Attributes\UsesClass;
|
use PHPUnit\Framework\Attributes\UsesClass;
|
||||||
@@ -23,6 +26,10 @@ class TogglTimeEntriesImporterTest extends ImporterTestAbstract
|
|||||||
public function test_import_of_test_file_succeeds(): void
|
public function test_import_of_test_file_succeeds(): void
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
Queue::fake([
|
||||||
|
RecalculateSpentTimeForProject::class,
|
||||||
|
RecalculateSpentTimeForTask::class,
|
||||||
|
]);
|
||||||
$organization = Organization::factory()->create();
|
$organization = Organization::factory()->create();
|
||||||
$timezone = 'Europe/Vienna';
|
$timezone = 'Europe/Vienna';
|
||||||
$importer = new TogglTimeEntriesImporter;
|
$importer = new TogglTimeEntriesImporter;
|
||||||
@@ -37,7 +44,7 @@ class TogglTimeEntriesImporterTest extends ImporterTestAbstract
|
|||||||
$queryLog = DB::getQueryLog();
|
$queryLog = DB::getQueryLog();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
$this->assertCount(21, $queryLog);
|
$this->assertCount(22, $queryLog);
|
||||||
$testScenario = $this->checkTestScenarioAfterImportExcludingTimeEntries();
|
$testScenario = $this->checkTestScenarioAfterImportExcludingTimeEntries();
|
||||||
$this->checkTimeEntries($testScenario);
|
$this->checkTimeEntries($testScenario);
|
||||||
$this->assertSame(2, $report->timeEntriesCreated);
|
$this->assertSame(2, $report->timeEntriesCreated);
|
||||||
@@ -46,11 +53,17 @@ class TogglTimeEntriesImporterTest extends ImporterTestAbstract
|
|||||||
$this->assertSame(1, $report->usersCreated);
|
$this->assertSame(1, $report->usersCreated);
|
||||||
$this->assertSame(2, $report->projectsCreated);
|
$this->assertSame(2, $report->projectsCreated);
|
||||||
$this->assertSame(1, $report->clientsCreated);
|
$this->assertSame(1, $report->clientsCreated);
|
||||||
|
Queue::assertPushed(RecalculateSpentTimeForProject::class, 2);
|
||||||
|
Queue::assertPushed(RecalculateSpentTimeForTask::class, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_import_of_test_with_special_characters_description_succeeds(): void
|
public function test_import_of_test_with_special_characters_description_succeeds(): void
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
Queue::fake([
|
||||||
|
RecalculateSpentTimeForProject::class,
|
||||||
|
RecalculateSpentTimeForTask::class,
|
||||||
|
]);
|
||||||
$organization = Organization::factory()->create();
|
$organization = Organization::factory()->create();
|
||||||
$timezone = 'Europe/Vienna';
|
$timezone = 'Europe/Vienna';
|
||||||
$importer = new TogglTimeEntriesImporter;
|
$importer = new TogglTimeEntriesImporter;
|
||||||
@@ -84,6 +97,10 @@ class TogglTimeEntriesImporterTest extends ImporterTestAbstract
|
|||||||
$importer->importData($data, $timezone);
|
$importer->importData($data, $timezone);
|
||||||
$importer = new TogglTimeEntriesImporter;
|
$importer = new TogglTimeEntriesImporter;
|
||||||
$importer->init($organization);
|
$importer->init($organization);
|
||||||
|
Queue::fake([
|
||||||
|
RecalculateSpentTimeForProject::class,
|
||||||
|
RecalculateSpentTimeForTask::class,
|
||||||
|
]);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
DB::enableQueryLog();
|
DB::enableQueryLog();
|
||||||
@@ -93,7 +110,7 @@ class TogglTimeEntriesImporterTest extends ImporterTestAbstract
|
|||||||
$queryLog = DB::getQueryLog();
|
$queryLog = DB::getQueryLog();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
$this->assertCount(13, $queryLog);
|
$this->assertCount(14, $queryLog);
|
||||||
$testScenario = $this->checkTestScenarioAfterImportExcludingTimeEntries();
|
$testScenario = $this->checkTestScenarioAfterImportExcludingTimeEntries();
|
||||||
$this->checkTimeEntries($testScenario, true);
|
$this->checkTimeEntries($testScenario, true);
|
||||||
$this->assertSame(2, $report->timeEntriesCreated);
|
$this->assertSame(2, $report->timeEntriesCreated);
|
||||||
@@ -102,5 +119,7 @@ class TogglTimeEntriesImporterTest extends ImporterTestAbstract
|
|||||||
$this->assertSame(0, $report->usersCreated);
|
$this->assertSame(0, $report->usersCreated);
|
||||||
$this->assertSame(0, $report->projectsCreated);
|
$this->assertSame(0, $report->projectsCreated);
|
||||||
$this->assertSame(0, $report->clientsCreated);
|
$this->assertSame(0, $report->clientsCreated);
|
||||||
|
Queue::assertPushed(RecalculateSpentTimeForProject::class, 2);
|
||||||
|
Queue::assertPushed(RecalculateSpentTimeForTask::class, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user