mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-02-25 06:14:27 +08:00

- Renamed AssignSortSetCommand to AssignSortRuleCommand, updated contents and testing. - Updated sorting operations to not update timestamps if only priority is changed.
113 lines
4.3 KiB
PHP
113 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace Commands;
|
|
|
|
use BookStack\Entities\Models\Book;
|
|
use BookStack\Sorting\SortRule;
|
|
use Tests\TestCase;
|
|
|
|
class AssignSortRuleCommandTest extends TestCase
|
|
{
|
|
public function test_no_given_sort_rule_lists_options()
|
|
{
|
|
$sortRules = SortRule::factory()->createMany(10);
|
|
|
|
$commandRun = $this->artisan('bookstack:assign-sort-rule')
|
|
->expectsOutputToContain('Sort rule ID required!')
|
|
->assertExitCode(1);
|
|
|
|
foreach ($sortRules as $sortRule) {
|
|
$commandRun->expectsOutputToContain("{$sortRule->id}: {$sortRule->name}");
|
|
}
|
|
}
|
|
|
|
public function test_run_without_options_advises_help()
|
|
{
|
|
$this->artisan("bookstack:assign-sort-rule 100")
|
|
->expectsOutput("No option provided to specify target. Run with the -h option to see all available options.")
|
|
->assertExitCode(1);
|
|
}
|
|
|
|
public function test_run_without_valid_sort_advises_help()
|
|
{
|
|
$this->artisan("bookstack:assign-sort-rule 100342 --all-books")
|
|
->expectsOutput("Sort rule of provided id 100342 not found!")
|
|
->assertExitCode(1);
|
|
}
|
|
|
|
public function test_confirmation_required()
|
|
{
|
|
$sortRule = SortRule::factory()->create();
|
|
|
|
$this->artisan("bookstack:assign-sort-rule {$sortRule->id} --all-books")
|
|
->expectsConfirmation('Are you sure you want to continue?', 'no')
|
|
->assertExitCode(1);
|
|
|
|
$booksWithSort = Book::query()->whereNotNull('sort_rule_id')->count();
|
|
$this->assertEquals(0, $booksWithSort);
|
|
}
|
|
|
|
public function test_assign_to_all_books()
|
|
{
|
|
$sortRule = SortRule::factory()->create();
|
|
$booksWithoutSort = Book::query()->whereNull('sort_rule_id')->count();
|
|
$this->assertGreaterThan(0, $booksWithoutSort);
|
|
|
|
$this->artisan("bookstack:assign-sort-rule {$sortRule->id} --all-books")
|
|
->expectsOutputToContain("This will apply sort rule [{$sortRule->id}: {$sortRule->name}] to {$booksWithoutSort} book(s)")
|
|
->expectsConfirmation('Are you sure you want to continue?', 'yes')
|
|
->expectsOutputToContain("Sort applied to {$booksWithoutSort} book(s)")
|
|
->assertExitCode(0);
|
|
|
|
$booksWithoutSort = Book::query()->whereNull('sort_rule_id')->count();
|
|
$this->assertEquals(0, $booksWithoutSort);
|
|
}
|
|
|
|
public function test_assign_to_all_books_without_sort()
|
|
{
|
|
$totalBooks = Book::query()->count();
|
|
$book = $this->entities->book();
|
|
$sortRuleA = SortRule::factory()->create();
|
|
$sortRuleB = SortRule::factory()->create();
|
|
$book->sort_rule_id = $sortRuleA->id;
|
|
$book->save();
|
|
|
|
$booksWithoutSort = Book::query()->whereNull('sort_rule_id')->count();
|
|
$this->assertEquals($totalBooks, $booksWithoutSort + 1);
|
|
|
|
$this->artisan("bookstack:assign-sort-rule {$sortRuleB->id} --books-without-sort")
|
|
->expectsConfirmation('Are you sure you want to continue?', 'yes')
|
|
->expectsOutputToContain("Sort applied to {$booksWithoutSort} book(s)")
|
|
->assertExitCode(0);
|
|
|
|
$booksWithoutSort = Book::query()->whereNull('sort_rule_id')->count();
|
|
$this->assertEquals(0, $booksWithoutSort);
|
|
$this->assertEquals($totalBooks, $sortRuleB->books()->count() + 1);
|
|
}
|
|
|
|
public function test_assign_to_all_books_with_sort()
|
|
{
|
|
$book = $this->entities->book();
|
|
$sortRuleA = SortRule::factory()->create();
|
|
$sortRuleB = SortRule::factory()->create();
|
|
$book->sort_rule_id = $sortRuleA->id;
|
|
$book->save();
|
|
|
|
$this->artisan("bookstack:assign-sort-rule {$sortRuleB->id} --books-with-sort={$sortRuleA->id}")
|
|
->expectsConfirmation('Are you sure you want to continue?', 'yes')
|
|
->expectsOutputToContain("Sort applied to 1 book(s)")
|
|
->assertExitCode(0);
|
|
|
|
$book->refresh();
|
|
$this->assertEquals($sortRuleB->id, $book->sort_rule_id);
|
|
$this->assertEquals(1, $sortRuleB->books()->count());
|
|
}
|
|
|
|
public function test_assign_to_all_books_with_sort_id_is_validated()
|
|
{
|
|
$this->artisan("bookstack:assign-sort-rule 50 --books-with-sort=beans")
|
|
->expectsOutputToContain("Provided --books-with-sort option value is invalid")
|
|
->assertExitCode(1);
|
|
}
|
|
}
|