diff --git a/app/Console/Commands/SetupTestEnv.php b/app/Console/Commands/SetupTestEnv.php index 40bd2fbf7..75c44af69 100644 --- a/app/Console/Commands/SetupTestEnv.php +++ b/app/Console/Commands/SetupTestEnv.php @@ -8,7 +8,6 @@ use Illuminate\Console\Command; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\DB; -use Database\Seeders\v_2_0_0\DatabaseSeeder; class SetupTestEnv extends Command { diff --git a/tests/Unit/ArticleControllerTest.php b/tests/Unit/ArticleControllerTest.php index 8dadd659a..2fdca20d9 100644 --- a/tests/Unit/ArticleControllerTest.php +++ b/tests/Unit/ArticleControllerTest.php @@ -19,7 +19,7 @@ use Tests\TestCase; class ArticleControllerTest extends TestCase { - //use DatabaseTransactions; + protected $user; // Declare a user property // Set up the authenticated user before each test @@ -36,208 +36,221 @@ class ArticleControllerTest extends TestCase $password = Hash::make($str); $email = $faker->unique()->email(); $user = new User([ - 'first_name' => $faker->firstName(), - 'last_name' => $faker->lastName(), - 'email' => $email, - 'user_name' => $faker->unique()->userName(), - 'password' => $password, + 'first_name' => $faker->firstName(), + 'last_name' => $faker->lastName(), + 'email' => $email, + 'user_name' => $faker->unique()->userName(), + 'password' => $password, 'assign_group' => 1, - 'primary_dpt' => 1, - 'active' => 1, - 'role' => 'agent', - 'agent_tzone' => 81, + 'primary_dpt' => 1, + 'active' => 1, + 'role' => 'agent', + 'agent_tzone' => 81, ]); $user->save(); // Check if data is inserted - $this->assertDatabaseHas('users', ['email'=>$email]); + $this->assertDatabaseHas('users', ['email' => $email]); // Authenticate as the created user $this->actingAs($user); $this->assertAuthenticated(); + } + /** @test */ + public + function it_can_display_the_article_index_page() + { - /** @test */ - public function it_can_display_the_article_index_page() - { - $response = $this->get(route('article.index')); + $response = $this->get(route('article.index')); - $response->assertStatus(200); - } + $response->assertStatus(200); + } - public function testStoreArticleWithCategories() - { - // Create a Category model for testing - $data = [ - 'name' => 'Test Category', - 'description' => 'Test Category Description', - ]; + public + function testStoreArticleWithCategories() + { - $validator = Validator::make($data, (new CategoryRequest())->rules()); + // Create a Category model for testing + $data = [ + 'name' => 'Test Category', + 'description' => 'Test Category Description', + ]; - $this->assertTrue($validator->passes()); - - $response = $this->post(route('category.store'), $data); - - $response->assertStatus(302); - $response->assertSessionHas('success'); - $this->assertDatabaseHas('kb_category', $data); - $category = Category::latest()->first(); - - // Article data - $articleData = [ - 'name' => 'Test Article', - 'description'=> 'Test Article Description', - 'category_id'=> $category->id, - 'year' => '2023', - 'month' => '10', - 'day' => '03', - 'hour' => '12', - 'minute' => '30', - ]; - - $articleRequest = new ArticleRequest($articleData); - - // Act - try { - $validator = Validator::make($articleData, (new ArticleRequest())->rules()); + $validator = Validator::make($data, (new CategoryRequest())->rules()); $this->assertTrue($validator->passes()); - $response = $this->post(route('article.store'), $articleData); - $response->assertStatus(200); - } catch (Exception $e) { - $response = null; + + $response = $this->post(route('category.store'), $data); + + $response->assertStatus(302); + $response->assertSessionHas('success'); + $this->assertDatabaseHas('kb_category', $data); + $category = Category::latest()->first(); + + // Article data + $articleData = [ + 'name' => 'Test Article', + 'description' => 'Test Article Description', + 'category_id' => $category->id, + 'year' => '2023', + 'month' => '10', + 'day' => '03', + 'hour' => '12', + 'minute' => '30', + ]; + + $articleRequest = new ArticleRequest($articleData); + + // Act + try { + $validator = Validator::make($articleData, (new ArticleRequest())->rules()); + + $this->assertTrue($validator->passes()); + $response = $this->post(route('article.store'), $articleData); + $response->assertStatus(200); + } catch (Exception $e) { + $response = null; + } + + // Assert + if ($response) { + $response->assertStatus(200); // Check if the response status code is a redirect (302) + + $article = Article::latest()->first(); + + $article_relationship = new Relationship(); + + $article_relationship->category_id = $category->id; + $article_relationship->article_id = $article->id; + $article_relationship->save(); + + // Verify that the article was created and the category relationship exists + $this->assertDatabaseHas('kb_article', [ + 'name' => $articleData['name'], + 'slug' => Str::slug($articleData['name'], '-'), + 'publish_time' => $articleData['year'] . '-' . $articleData['month'] . '-' . $articleData['day'] . ' ' . $articleData['hour'] . ':' . $articleData['minute'] . ':00', + ]); + + // Check if the category relationship exists + $this->assertDatabaseHas('kb_article_relationship', [ + 'category_id' => $category->id, + 'article_id' => Article::latest()->first()->id, // Get the ID of the latest created article + ]); + } else { + $this->fail('Exception thrown: ' . $e->getMessage()); + } } - // Assert - if ($response) { - $response->assertStatus(200); // Check if the response status code is a redirect (302) + public + function testEditArticle() + { + + // Arrange + $article = Article::latest()->first(); // Create a sample Article for testing + $relationship = Relationship::latest()->first(); // Create a sample Relationship for testing + $category = Category::latest()->first(); // Create a sample Category for testing + + $assign = $relationship->where('article_id', 'id')->pluck('category_id'); + $category = $category->pluck('id', 'name'); + + $response = $this->get( + "/article/{$article->id}/edit", + ['category' => $category, + 'article' => $article, + 'assign' => $assign, + ] + ); + $response->assertStatus(200); + } + + public + function testUpdateArticle() + { $article = Article::latest()->first(); + $category = Category::latest()->first(); - $article_relationship = new Relationship(); + $data = [ + 'id' => $article->id, + 'name' => 'Updated Article Name', + 'description' => 'Updated Description', + 'slug' => Str::slug('Updated Article Name', '-'), + 'category_id' => [1, 2], + 'year' => '2023', + 'month' => '10', + 'day' => '03', + 'hour' => '2', + 'minute' => '20', + ]; - $article_relationship->category_id = $category->id; - $article_relationship->article_id = $article->id; - $article_relationship->save(); + $validator = Validator::make($data, (new ArticleUpdate())->rules()); - // Verify that the article was created and the category relationship exists - $this->assertDatabaseHas('kb_article', [ - 'name' => $articleData['name'], - 'slug' => Str::slug($articleData['name'], '-'), - 'publish_time' => $articleData['year'].'-'.$articleData['month'].'-'.$articleData['day'].' '.$articleData['hour'].':'.$articleData['minute'].':00', - ]); + $this->assertTrue($validator->passes()); - // Check if the category relationship exists - $this->assertDatabaseHas('kb_article_relationship', [ - 'category_id' => $category->id, - 'article_id' => Article::latest()->first()->id, // Get the ID of the latest created article - ]); - } else { - $this->fail('Exception thrown: '.$e->getMessage()); + $response = $this->put(route('article.update', $article->id, $data)); + + $response->assertStatus(302); + + $article_relationship = Relationship::latest()->first(); + $article_relationship = $article_relationship->where('article_id', $article->id); + $article_relationship->delete(); + + $article = Article::latest()->first(); + $relation = new Relationship(); + $relation->category_id = $category->id; + $relation->article_id = $article->id; + $relation->save(); + } + + /** @test */ + public + function it_can_delete_a_category() + { + + // Create a sample article, relationship + $article = Article::latest()->first(); + $relationship = Relationship::find($article->id); + + // Ensure the destroy route works as expected + + $response = $this->get("/article/delete/{$article->slug}"); + + // Assert that success message is flashed + $response->assertSessionHas('success', Lang::get('lang.article_deleted_successfully')); + + // Create a category + $category = Category::latest()->first(); + + // Create a related relationship (you may need to adjust this based on your actual relationships) + $relation = Relationship::find($category->id); + + // Call the destroy method with the category ID + $response = $this->get("/category/delete/{$category->id}"); + + // Assert that the category is deleted from the database + $this->assertDatabaseMissing('kb_category', ['id' => $category->id]); + } + + public + function it_cannot_delete_a_article_if_related() + { + + // Create a category + $article = Article::find(1); + + // Call the destroy method with the category ID (without creating related records) + $response = $this->get("/article/delete/{$article->slug}"); + + // Assert that the category is not deleted from the database + $this->assertDatabaseHas('kb_article', ['id' => $article->id]); + + // Assert that the response is a redirect + $response->assertRedirect(); + + // Assert that the response has a failure message + $response->assertSessionHas('fails', Lang::get('lang.article_not_deleted')); } } - public function testEditArticle() - { - // Arrange - $article = Article::latest()->first(); // Create a sample Article for testing - $relationship = Relationship::latest()->first(); // Create a sample Relationship for testing - $category = Category::latest()->first(); // Create a sample Category for testing - - $assign = $relationship->where('article_id', 'id')->pluck('category_id'); - $category = $category->pluck('id', 'name'); - - $response = $this->get( - "/article/{$article->id}/edit", - ['category' => $category, - 'article' => $article, - 'assign' => $assign, - ] - ); - $response->assertStatus(200); - } - - public function testUpdateArticle() - { - $article = Article::latest()->first(); - $category = Category::latest()->first(); - - $data = [ - 'id' => $article->id, - 'name' => 'Updated Article Name', - 'description' => 'Updated Description', - 'slug' => Str::slug('Updated Article Name', '-'), - 'category_id' => [1, 2], - 'year' => '2023', - 'month' => '10', - 'day' => '03', - 'hour' => '2', - 'minute' => '20', - ]; - - $validator = Validator::make($data, (new ArticleUpdate())->rules()); - - $this->assertTrue($validator->passes()); - - $response = $this->put(route('article.update', $article->id), $data); - - $response->assertStatus(302); - - $article_relationship = Relationship::latest()->first(); - $article_relationship = $article_relationship->where('article_id', $article->id); - $article_relationship->delete(); - - $article = Article::latest()->first(); - $relation = new Relationship(); - $relation->category_id = $category->id; - $relation->article_id = $article->id; - $relation->save(); - } - - /** @test */ - public function it_can_delete_a_category() - { - // Create a sample article, relationship - $article = Article::latest()->first(); - $relationship = Relationship::find($article->id); - - // Ensure the destroy route works as expected - - $response = $this->get("/article/delete/{$article->slug}"); - - // Assert that success message is flashed - $response->assertSessionHas('success', Lang::get('lang.article_deleted_successfully')); - - // Create a category - $category = Category::latest()->first(); - - // Create a related relationship (you may need to adjust this based on your actual relationships) - $relation = Relationship::find($category->id); - - // Call the destroy method with the category ID - $response = $this->get("/category/delete/{$category->id}"); - - // Assert that the category is deleted from the database - $this->assertDatabaseMissing('kb_category', ['id' => $category->id]); - } - - public function it_cannot_delete_a_article_if_related() - { - // Create a category - $article = Article::find(1); - - // Call the destroy method with the category ID (without creating related records) - $response = $this->get("/article/delete/{$article->slug}"); - - // Assert that the category is not deleted from the database - $this->assertDatabaseHas('kb_article', ['id' => $article->id]); - - // Assert that the response is a redirect - $response->assertRedirect(); - - // Assert that the response has a failure message - $response->assertSessionHas('fails', Lang::get('lang.article_not_deleted')); - } -} diff --git a/tests/Unit/CategoryControllerTest.php b/tests/Unit/CategoryControllerTest.php index 6cc884bae..f643030b2 100644 --- a/tests/Unit/CategoryControllerTest.php +++ b/tests/Unit/CategoryControllerTest.php @@ -16,7 +16,6 @@ use Tests\TestCase; class CategoryControllerTest extends TestCase { - //use DatabaseTransactions; protected $user; // Declare a user property // Set up the authenticated user before each test @@ -58,6 +57,7 @@ class CategoryControllerTest extends TestCase /** @test */ public function it_can_display_the_category_index_page() { + $response = $this->get(route('category.index')); $response->assertStatus(200); @@ -65,6 +65,7 @@ class CategoryControllerTest extends TestCase public function testValidationPasses() { + $data = [ 'name' => 'New Category', 'description' => 'Category Description', @@ -75,7 +76,6 @@ class CategoryControllerTest extends TestCase $this->assertTrue($validator->passes()); $response = $this->post(route('category.store'), $data); - $response->assertStatus(302); $response->assertSessionHas('success'); $this->assertDatabaseHas('kb_category', $data); @@ -83,6 +83,7 @@ class CategoryControllerTest extends TestCase public function testValidationFailsWhenNameMissing() { + $data = [ 'description' => 'Category Description', ]; @@ -96,6 +97,7 @@ class CategoryControllerTest extends TestCase public function testValidationFailsWhenNameExceedsMaxLength() { + $data = [ 'name' => str_repeat('A', 251), 'description' => 'Category Description', @@ -110,8 +112,9 @@ class CategoryControllerTest extends TestCase public function testValidationFailsWhenNameNotUnique() { + $data = [ - 'name' => 'Greetings', + 'name' => 'New Category', 'description' => 'Category Description', ]; @@ -124,6 +127,7 @@ class CategoryControllerTest extends TestCase public function testValidationFailsWhenDescriptionMissing() { + $data = [ 'name' => 'New Category', ]; @@ -137,6 +141,7 @@ class CategoryControllerTest extends TestCase public function testEditCategory() { + $category = Category::latest()->first(); $categories = Category::pluck('name', 'id')->toArray(); $response = $this->get( @@ -151,6 +156,7 @@ class CategoryControllerTest extends TestCase /** @test */ public function it_can_update_an_existing_category() { + // Retrieve an existing category from the database $category = Category::latest()->first(); @@ -173,11 +179,12 @@ class CategoryControllerTest extends TestCase /** @test */ public function it_cannot_update_an_existing_category() { + // Retrieve an existing category from the database $category = Category::latest()->first(); $data = [ - 'name' => 'Greetings', + 'name' => 'Updated Category Name', 'description' => 'Updated Description', ]; @@ -193,10 +200,11 @@ class CategoryControllerTest extends TestCase /** @test */ public function it_can_delete_a_category() { + // Create a category $category = Category::latest()->first(); - // Create a related relationship (you may need to adjust this based on your actual relationships) + // Create a related relationship $relation = Relationship::find($category->id); // Call the destroy method with the category ID @@ -209,25 +217,7 @@ class CategoryControllerTest extends TestCase $response->assertRedirect(); // Assert that the response has a success message - $response->assertSessionHas('success', Lang::get('lang.category_deleted_successfully')); - } + $response->assertSessionHas('success', Lang::get('lang.category_deleted_successfully')); + } - /** @test */ - public function it_cannot_delete_a_category_if_related() - { - // Create a category - $category = Category::find(1); - - // Call the destroy method with the category ID (without creating related records) - $response = $this->get("/category/delete/{$category->id}"); - - // Assert that the category is not deleted from the database - $this->assertDatabaseHas('kb_category', ['id' => $category->id]); - - // Assert that the response is a redirect - $response->assertRedirect(); - - // Assert that the response has a failure message - $response->assertSessionHas('fails', Lang::get('lang.category_not_deleted')); - } } diff --git a/tests/Unit/PageControllerTest.php b/tests/Unit/PageControllerTest.php index 67f298d53..eea515725 100644 --- a/tests/Unit/PageControllerTest.php +++ b/tests/Unit/PageControllerTest.php @@ -7,13 +7,13 @@ use App\Model\kb\Page; use App\User; use Faker\Factory as FakerFactory; use Illuminate\Foundation\Testing\DatabaseTransactions; +use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Tests\TestCase; class PageControllerTest extends TestCase { - use DatabaseTransactions; protected $user; // Declare a user property // Set up the authenticated user before each test @@ -55,6 +55,7 @@ class PageControllerTest extends TestCase /** @test */ public function it_can_display_the_page_index_page() { + $this->setUp(); $response = $this->get(route('page.index')); $response->assertStatus(200); @@ -62,6 +63,7 @@ class PageControllerTest extends TestCase public function testCreateMethod() { + $this->setUp(); $response = $this->get('/page/create'); $response->assertStatus(200); @@ -69,6 +71,7 @@ class PageControllerTest extends TestCase public function testValidationPasses() { + $this->setUp(); $data = [ 'name' => 'New Page', 'description' => 'Page Description', @@ -87,6 +90,7 @@ class PageControllerTest extends TestCase public function testValidationFailsWhenNameMissing() { + $this->setUp(); $data = [ 'description' => 'Page Description', ]; @@ -100,8 +104,9 @@ class PageControllerTest extends TestCase public function testValidationFailsWhenNameNotUnique() { + $this->setUp(); $data = [ - 'name' => 'Page1', + 'name' => 'New Page', 'description' => 'Page Description', ]; @@ -114,6 +119,7 @@ class PageControllerTest extends TestCase public function testValidationFailsWhenDescriptionMissing() { + $this->setUp(); $data = [ 'name' => 'New', ]; @@ -127,6 +133,7 @@ class PageControllerTest extends TestCase public function testEditPage() { + $this->setUp(); $page = Page::latest()->first(); $response = $this->get('/page/'.$page->id.'/edit'); @@ -136,6 +143,7 @@ class PageControllerTest extends TestCase public function testUpdatePage() { + $this->setUp(); $page = Page::latest()->first(); $data = [ @@ -155,10 +163,11 @@ class PageControllerTest extends TestCase public function testCannotUpdatePage() { + $this->setUp(); $page = Page::latest()->first(); $data = [ - 'name' => 'Page1', + 'name' => 'Updated Page Name', 'description' => 'Updated Description', ]; @@ -173,6 +182,7 @@ class PageControllerTest extends TestCase public function testDestroyMethod() { + $this->setUp(); $page = Page::latest()->first(); $response = $this->delete('/page/'.$page->id); diff --git a/tests/Unit/TicketControllerTest.php b/tests/Unit/TicketControllerTest.php index 788d3761c..b2e29109a 100644 --- a/tests/Unit/TicketControllerTest.php +++ b/tests/Unit/TicketControllerTest.php @@ -5,6 +5,8 @@ namespace Tests\Unit; use App\Model\helpdesk\Ticket\Ticket_Thread; use App\Model\helpdesk\Ticket\Tickets; use App\User; +use DateTimeZone; +use Faker\Factory as FakerFactory; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Lang; @@ -12,80 +14,45 @@ use Tests\TestCase; class TicketControllerTest extends TestCase { - use DatabaseTransactions; - - /** - * A basic unit test example. - * - * @return void - */ - public function test_user_change_the_status() + //Testing Reply Alert and Last Activity filed + public function test_reply() { - $str = 'Demopass@1'; - $password = Hash::make($str); - $user = new User([ - 'first_name' => 'a', - 'last_name' => 'noor', - 'email' => 'naveen12@gmail.com', - 'user_name' => 'noor', - 'password' => $password, - 'active' => 1, - 'role' => 'user', - ]); - $user->save(); + $faker = FakerFactory::create(); - // Authenticate as the created user + // Get previously created user to authenticate + + $user = User::latest()->first(); $this->actingAs($user); - $ticket = new Tickets( - [ - 'ticket_number' => 'AAAA-0000-0001', - 'user_id' => $user->id, - 'priority_id' => 2, - 'sla' => 2, - 'help_topic_id' => 1, - 'status' => 1, - 'source' => 1, - ] - ); + $this->assertAuthenticated(); - $ticket->save(); - $ticket->dept_id = 1; - $ticket->save(); + //Get previously created Ticket - $ticket_thread = new Ticket_Thread( - [ - 'ticket_id' => $ticket->id, - 'user_id' => $user->id, - 'poster' => 'client', - 'title' => 'TestCase', - 'body' => 'Testing', - ] - ); - $ticket_thread->save(); + $tickets = Tickets::latest()->first(); - $mytickets = $this->get(route('ticket2')); - $mytickets->assertStatus(200); + // Define the route URL with the Ticket ID - $response = $this->post(route('select_all'), [ - 'select_all' => [$ticket->id], - 'submit' => 'Open', + $url = route('ticket.thread', ['id' => $tickets->id]); - ]); + $response2 = $this->get($url); - // Assert that the response status code indicates success - $response->assertStatus(302); // Adjust this as needed + // Assert that the response status is 200 (OK). + $response2->assertStatus(200); - // Assert that the ticket's status has been updated to open + // Create fake data for the reply + + $replyData = [ + 'ticket_ID' => $tickets->id, + 'reply_content' => $faker->paragraph, + 'created_at' => date_default_timezone_set('UTC'), + 'updated_at' => date_default_timezone_set('UTC'), + ]; + + // Make a POST request to the route with the reply data + $response3 = $this->post(route('ticket.reply', ['id' => $tickets->id]), $replyData); + $response3->assertStatus(200); + $response3->assertSee(Lang::get('lang.you_have_successfully_replied_to_your_ticket')); - $response->assertSessionHas('success', Lang::get('lang.tickets_have_been_opened')); - $response = $this->post(route('select_all'), [ - 'select_all' => [$ticket->id], - 'submit' => 'Close', - ]); - $response->assertStatus(302); // Adjust this as needed - $this->assertEquals(3, $ticket->fresh()->status); // Adjust this as needed - $response->assertSessionHas('success', Lang::get('lang.tickets_have_been_closed')); } }