SearchTermTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. use Webkul\Marketing\Models\SearchTerm;
  3. use function Pest\Laravel\deleteJson;
  4. use function Pest\Laravel\get;
  5. use function Pest\Laravel\postJson;
  6. use function Pest\Laravel\putJson;
  7. it('should show the search terms index page', function () {
  8. // Act and Assert.
  9. $this->loginAsAdmin();
  10. get(route('admin.marketing.search_seo.search_terms.index'))
  11. ->assertOk()
  12. ->assertSeeText(trans('admin::app.marketing.search-seo.search-terms.index.title'))
  13. ->assertSeeText(trans('admin::app.marketing.search-seo.search-terms.index.create-btn'));
  14. });
  15. it('should fail the validation with errors when certain field not provided when store the search term', function () {
  16. // Act and Assert.
  17. $this->loginAsAdmin();
  18. postJson(route('admin.marketing.search_seo.search_terms.store'))
  19. ->assertJsonValidationErrorFor('term')
  20. ->assertJsonValidationErrorFor('channel_id')
  21. ->assertJsonValidationErrorFor('locale')
  22. ->assertUnprocessable();
  23. });
  24. it('should store the newly created search term', function () {
  25. // Act and Assert.
  26. $this->loginAsAdmin();
  27. postJson(route('admin.marketing.search_seo.search_terms.store'), [
  28. 'term' => $term = fake()->randomElement(['jackets', 'phone', 'computers', 'electronics']),
  29. 'redirect_url' => $url = fake()->url(),
  30. 'channel_id' => $channelId = core()->getCurrentChannel()->id,
  31. 'locale' => $locale = core()->getCurrentLocale()->code,
  32. ])
  33. ->assertOk()
  34. ->assertSeeText(trans('admin::app.marketing.search-seo.search-terms.index.create.success'));
  35. $this->assertModelWise([
  36. SearchTerm::class => [
  37. [
  38. 'term' => $term,
  39. 'redirect_url' => $url,
  40. 'channel_id' => $channelId,
  41. 'locale' => $locale,
  42. ],
  43. ],
  44. ]);
  45. });
  46. it('should fail the validation with errors when certain field not provided when update the search term', function () {
  47. // Arrange.
  48. $searchTerm = SearchTerm::factory()->create();
  49. // Act and Assert.
  50. $this->loginAsAdmin();
  51. putJson(route('admin.marketing.search_seo.search_terms.update', $searchTerm->id))
  52. ->assertJsonValidationErrorFor('term')
  53. ->assertJsonValidationErrorFor('channel_id')
  54. ->assertJsonValidationErrorFor('locale')
  55. ->assertUnprocessable();
  56. });
  57. it('should update the search term', function () {
  58. // Arrange.
  59. $searchTerm = SearchTerm::factory()->create();
  60. // Act and Assert.
  61. $this->loginAsAdmin();
  62. putJson(route('admin.marketing.search_seo.search_terms.update'), [
  63. 'id' => $searchTerm->id,
  64. 'term' => $term = fake()->randomElement(['jackets', 'phone', 'computers', 'electronics']),
  65. 'channel_id' => $channelId = core()->getCurrentChannel()->id,
  66. 'locale' => $locale = core()->getCurrentLocale()->code,
  67. ])
  68. ->assertOk()
  69. ->assertSeeText(trans('admin::app.marketing.search-seo.search-terms.index.edit.success'));
  70. $this->assertModelWise([
  71. SearchTerm::class => [
  72. [
  73. 'id' => $searchTerm->id,
  74. 'term' => $term,
  75. 'channel_id' => $channelId,
  76. 'locale' => $locale,
  77. ],
  78. ],
  79. ]);
  80. });
  81. it('should delete the search term', function () {
  82. // Arrange.
  83. $searchTerm = SearchTerm::factory()->create();
  84. // Act and Assert.
  85. $this->loginAsAdmin();
  86. deleteJson(route('admin.marketing.search_seo.search_terms.delete', $searchTerm->id))
  87. ->assertOk()
  88. ->assertSeeText(trans('admin::app.marketing.search-seo.search-terms.index.edit.delete-success'));
  89. $this->assertDatabaseMissing('search_terms', [
  90. 'id' => $searchTerm->id,
  91. ]);
  92. });
  93. it('should mass delete the search term', function () {
  94. // Arrange.
  95. $searchTerms = SearchTerm::factory()->count(2)->create();
  96. // Act and Assert.
  97. $this->loginAsAdmin();
  98. postJson(route('admin.marketing.search_seo.search_terms.mass_delete'), [
  99. 'indices' => $searchTerms->pluck('id')->toArray(),
  100. ])
  101. ->assertOk()
  102. ->assertSeeText(trans('admin::app.marketing.search-seo.search-terms.index.datagrid.mass-delete-success'));
  103. foreach ($searchTerms as $searchTerm) {
  104. $this->assertDatabaseMissing('search_terms', [
  105. 'id' => $searchTerm->id,
  106. ]);
  107. }
  108. });