diff --git a/database/factories/PostFactory.php b/database/factories/PostFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..10001e7324db227ee614a72432226ebcd3e0ae56
--- /dev/null
+++ b/database/factories/PostFactory.php
@@ -0,0 +1,12 @@
+<?php
+
+use Faker\Generator as Faker;
+
+$factory->define(App\Post::class, function (Faker $faker) {
+    return [
+        'title' => 'Post for Testing',
+        'body' => 'Post Body',
+        'user_id' => '0',
+        'cover_image' => 'noimage.jpg'
+    ];
+});
diff --git a/tests/Feature/ArticleTest.php b/tests/Feature/ArticleTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7c7f53c74344721de77cc30d3b7d124f4f3a629e
--- /dev/null
+++ b/tests/Feature/ArticleTest.php
@@ -0,0 +1,203 @@
+<?php
+
+namespace Tests\Feature;
+
+use App\Post;
+use App\Member;
+use App\User;
+
+use Tests\TestCase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+
+class ArticleTest extends TestCase
+{
+    /**
+     * test create article
+     *
+     * @return void
+     */
+    public function testCreateArticleSuccess()
+    {
+        $user = factory(User::class)->create();
+        
+        $response = $this->actingAs($user)
+                         ->visit('/posts/create')
+                         ->type('Post for Testing', 'title')
+                         ->type('Post Body', 'body')
+                         ->attach('storage/app/public/logo_itb.png', 'cover_image')
+                         ->press('Submit')
+                         ->seePageIs('/posts')
+                         ->see('Post Created');
+        
+        $dummy = Post::where('title', 'Post for Testing')->first();
+        $dummy->delete();
+
+        $user->delete();
+    }
+
+    /**
+     * test create article without title
+     *
+     * @return void
+     */
+    public function testCreateArticleWithoutTitle()
+    {
+        $user = factory(User::class)->create();
+        
+        $response = $this->actingAs($user)
+                         ->visit('/posts/create')
+                         ->type('', 'title')
+                         ->type('Post Body', 'body')
+                         ->attach('storage/app/public/logo_itb.png', 'cover_image')
+                         ->press('Submit')
+                         ->seePageIs('/posts/create')
+                         ->see('The title field is required.');
+
+        $user->delete();
+    }
+
+    /**
+     * test create article without body
+     *
+     * @return void
+     */
+    public function testCreateArticleWithoutBody()
+    {
+        $user = factory(User::class)->create();
+        
+        $response = $this->actingAs($user)
+                         ->visit('/posts/create')
+                         ->type('Post for Testing', 'title')
+                         ->type('', 'body')
+                         ->attach('storage/app/public/logo_itb.png', 'cover_image')
+                         ->press('Submit')
+                         ->seePageIs('/posts/create')
+                         ->see('The body field is required.');
+
+        $user->delete();
+    }
+
+    /**
+     * test create article without thumbnail
+     *
+     * @return void
+     */
+    public function testCreateArticleWithoutThumbnail()
+    {
+        $user = factory(User::class)->create();
+        
+        $response = $this->actingAs($user)
+                         ->visit('/posts/create')
+                         ->type('Post for Testing', 'title')
+                         ->type('Post Body', 'body')
+                         ->press('Submit')
+                         ->seePageIs('/posts')
+                         ->see('Post Created');
+
+        $dummy = Post::where('title', 'Post for Testing')->first();
+        $dummy->delete();
+
+        $user->delete();
+    }
+
+    /**
+     * test edit article
+     *
+     * @return void
+     */
+    public function testEditArticle()
+    {
+        $user = factory(User::class)->create();
+        $post = factory(Post::class)->create([
+            'user_id' => $user->id
+        ]);
+        
+        $response = $this->actingAs($user)
+                         ->visit('/posts/' . $post->id . '/edit')
+                         ->type('Post for Testing', 'title')
+                         ->type('Post Body', 'body')
+                         ->attach('storage/app/public/logo_itb.png', 'cover_image')
+                         ->press('Submit')
+                         ->seePageIs('/posts')
+                         ->see('Post Updated');
+                         
+        $post->delete();
+
+        $user->delete();
+    }
+
+    /**
+     * test edit article without title
+     *
+     * @return void
+     */
+    public function testEditArticleWithoutTitle()
+    {
+        $user = factory(User::class)->create();
+        $post = factory(Post::class)->create([
+            'user_id' => $user->id
+        ]);
+        
+        $response = $this->actingAs($user)
+                         ->visit('/posts/' . $post->id . '/edit')
+                         ->type('', 'title')
+                         ->type('Post Body', 'body')
+                         ->attach('storage/app/public/logo_itb.png', 'cover_image')
+                         ->press('Submit')
+                         ->seePageIs('/posts/' . $post->id . '/edit')
+                         ->see('The title field is required.');
+        
+        $post->delete();
+        $user->delete();
+    }
+
+    /**
+     * test edit article
+     *
+     * @return void
+     */
+    public function testEditArticleWithoutBody()
+    {
+        $user = factory(User::class)->create();
+        $post = factory(Post::class)->create([
+            'user_id' => $user->id
+        ]);
+        
+        $response = $this->actingAs($user)
+                         ->visit('/posts/' . $post->id . '/edit')
+                         ->type('Post for Testing', 'title')
+                         ->type('', 'body')
+                         ->attach('storage/app/public/logo_itb.png', 'cover_image')
+                         ->press('Submit')
+                         ->seePageIs('/posts/' . $post->id . '/edit')
+                         ->see('The body field is required.');
+
+        $post->delete();
+        $user->delete();
+    }
+
+    /**
+     * test edit article
+     *
+     * @return void
+     */
+    public function testEditArticleWithoutThumbnail()
+    {
+        $user = factory(User::class)->create();
+        $post = factory(Post::class)->create([
+            'user_id' => $user->id
+        ]);
+        
+        $response = $this->actingAs($user)
+                         ->visit('/posts/' . $post->id . '/edit')
+                         ->type('Post for Testing', 'title')
+                         ->type('Post Body', 'body')
+                         ->press('Submit')
+                         ->seePageIs('/posts')
+                         ->see('Post Updated');
+
+        $post->delete();
+        $user->delete();
+    }
+}