diff --git a/test/commit.vader b/test/commit.vader
new file mode 100644
index 0000000000000000000000000000000000000000..7e5823a7617830377429f5187fe6e4392385ed32
--- /dev/null
+++ b/test/commit.vader
@@ -0,0 +1,78 @@
+Include: setup.inc
+
+Execute (Stage untracked file with magit#stage_hunk on end hunk):
+    call Cd_test_sub()
+    Magit
+
+    Log("Stage first hunk")
+    call Search_file('unstaged', 0)
+    call magit#open_close_folding(1)
+    /^@@ 
+    call Move_relative(+3)
+    call Cursor_position()
+    call magit#stage_hunk(0)
+
+    Log("Check first stage")
+    call Cd_test()
+    let diff=Git_diff('staged', Get_filename(0))
+    call Expect_diff(g:test_script_dir . 'commit/commit_diff1.expect', diff)
+    call Cd_test_sub()
+
+    Log("Start a commit")
+    call magit#commit_command('CC')
+    call append(line('.'), ['Add bootstrap file', '', 'Some description text', 'On multiple lines', '', 'With blanks'])
+
+    Log("Stage a second hunk")
+    call Search_file('unstaged', 1)
+    call magit#stage_hunk(0)
+
+    Log("Check second stage")
+    call Cd_test()
+    let diff=Git_diff('staged', Get_filename(1))
+    call Expect_diff(g:test_script_dir . 'commit/commit_diff2.expect', diff)
+
+    Log("Complete commit message")
+    call magit#commit_command('CC')
+    call append(line('.'), ['Add more line after refresh', ''])
+    call Cd_test_sub()
+
+    Log("Update buffer")
+    call cursor(1, 0)
+    call magit#update_buffer()
+    call cursor(line('$'), 0)
+    call magit#update_buffer()
+
+    call magit#commit_command('CC')
+    call magit#commit_command('CC')
+    call Cd_test()
+    let commit_msg=Git_commit_msg('HEAD')
+    call Expect_diff(g:test_script_dir . 'commit/commit_commit1.expect', commit_msg)
+
+    Log("Stage third hunk")
+    call Search_file('unstaged', 0)
+    call magit#open_close_folding(1)
+    /^@@ 
+    call magit#stage_hunk(0)
+
+    Log("Check third stage")
+    call Cd_test()
+    let diff=Git_diff('staged', Get_filename(0))
+    call Expect_diff(g:test_script_dir . 'commit/commit_diff3.expect', diff)
+
+    Log("Start a commit")
+    call magit#commit_command('CC')
+    call append(line('.'), ['Dont want these lines'])
+    call Cd_test_sub()
+
+    Log("Close commit")
+    call magit#close_commit()
+
+    Log("Finish commit")
+    call magit#commit_command('CC')
+    call append(line('.'), ['Uber commit message'])
+    call magit#commit_command('CC')
+    call Cd_test()
+    let commit_msg=Git_commit_msg('HEAD')
+    call Expect_diff(g:test_script_dir . 'commit/commit_commit2.expect', commit_msg)
+
+Include: cleanup.inc
diff --git a/test/commit/commit_commit1.expect b/test/commit/commit_commit1.expect
new file mode 100644
index 0000000000000000000000000000000000000000..86f78e9fe5cb67649ce1cc6282ad2ec285d9fae7
--- /dev/null
+++ b/test/commit/commit_commit1.expect
@@ -0,0 +1,31 @@
+Add more line after refresh
+
+Add bootstrap file
+
+Some description text
+On multiple lines
+
+With blanks
+
+
+diff --git books/models.py books/models.py
+--- books/models.py
++++ books/models.py
+@@ -1,5 +1,9 @@
+ from django.db import models
+ 
++import urllib2 as urllib
++from PIL import Image
++import io
++
+ import isbn_search
+ 
+ class User(models.Model):
+diff --git bootstrap bootstrap
+new file mode 100755
+--- /dev/null
++++ bootstrap
+@@ -0,0 +1,3 @@
++pip install --user python-amazon-simple-product-api django
++python manage.py migrate
++python manage.py makemigrations books
diff --git a/test/commit/commit_commit2.expect b/test/commit/commit_commit2.expect
new file mode 100644
index 0000000000000000000000000000000000000000..4c521ef0e50e628d472a0cce8811d2161f8618f4
--- /dev/null
+++ b/test/commit/commit_commit2.expect
@@ -0,0 +1,38 @@
+Uber commit message
+
+
+diff --git books/models.py books/models.py
+--- books/models.py
++++ books/models.py
+@@ -24,20 +24,26 @@ class BookManager(models.Manager):
+ 				eisbn   = product.eisbn,
+ 				author  = product.author,
+ 				title   = product.title,
+-				edition = product.edition
++				edition = product.edition,
+ 				)
++		if product.cover_url is not '':
++			cover_img_bin = urllib.urlopen(product.cover_url)
++			cover_img_file = Image.open(io.BytesIO(cover_img_bin.read()))
++			book.cover_img.save("cover.jpg", cover_img_file)
+ 		return book
+ 
++def upload_path(book, filename):
++	return 'covers/%s/%s' % (book.isbn, filename)
++
+ class Book(models.Model):
+ 	isbn = models.CharField(max_length=10, unique=True)
+-	eisbn = models.CharField(max_length=13, blank=True)
++	eisbn = models.CharField(max_length=13, blank=True, null=True)
+ 	title = models.CharField(max_length=200)
+ 	author = models.CharField(max_length=200)
+-	edition = models.CharField(max_length=200, blank=True)
+-	cover = models.ImageField(upload_to='covers', blank=True)
++	edition = models.CharField(max_length=200, blank=True, null=True)
++	cover_img = models.ImageField(upload_to=upload_path)
+ 	def __unicode__(self):
+ 		return u'[%s] "%s" by %s' % (self.isbn, self.title, self.author,)
+-
+ 	objects = BookManager()
+ 
+ 
diff --git a/test/commit/commit_diff1.expect b/test/commit/commit_diff1.expect
new file mode 100644
index 0000000000000000000000000000000000000000..4d9138a938c57a7b32e49aa6e00289063c97ab00
--- /dev/null
+++ b/test/commit/commit_diff1.expect
@@ -0,0 +1,13 @@
+diff --git books/models.py books/models.py
+--- books/models.py
++++ books/models.py
+@@ -1,5 +1,9 @@
+ from django.db import models
+ 
++import urllib2 as urllib
++from PIL import Image
++import io
++
+ import isbn_search
+ 
+ class User(models.Model):
diff --git a/test/commit/commit_diff2.expect b/test/commit/commit_diff2.expect
new file mode 100644
index 0000000000000000000000000000000000000000..76e066c4387ad7187987eb805fae4a31d177c8e3
--- /dev/null
+++ b/test/commit/commit_diff2.expect
@@ -0,0 +1,8 @@
+diff --git bootstrap bootstrap
+new file mode 100755
+--- /dev/null
++++ bootstrap
+@@ -0,0 +1,3 @@
++pip install --user python-amazon-simple-product-api django
++python manage.py migrate
++python manage.py makemigrations books
diff --git a/test/commit/commit_diff3.expect b/test/commit/commit_diff3.expect
new file mode 100644
index 0000000000000000000000000000000000000000..cdc0a2f29ecd62eb850ffcd0fd61f47d510bda11
--- /dev/null
+++ b/test/commit/commit_diff3.expect
@@ -0,0 +1,35 @@
+diff --git books/models.py books/models.py
+--- books/models.py
++++ books/models.py
+@@ -24,20 +24,26 @@ class BookManager(models.Manager):
+ 				eisbn   = product.eisbn,
+ 				author  = product.author,
+ 				title   = product.title,
+-				edition = product.edition
++				edition = product.edition,
+ 				)
++		if product.cover_url is not '':
++			cover_img_bin = urllib.urlopen(product.cover_url)
++			cover_img_file = Image.open(io.BytesIO(cover_img_bin.read()))
++			book.cover_img.save("cover.jpg", cover_img_file)
+ 		return book
+ 
++def upload_path(book, filename):
++	return 'covers/%s/%s' % (book.isbn, filename)
++
+ class Book(models.Model):
+ 	isbn = models.CharField(max_length=10, unique=True)
+-	eisbn = models.CharField(max_length=13, blank=True)
++	eisbn = models.CharField(max_length=13, blank=True, null=True)
+ 	title = models.CharField(max_length=200)
+ 	author = models.CharField(max_length=200)
+-	edition = models.CharField(max_length=200, blank=True)
+-	cover = models.ImageField(upload_to='covers', blank=True)
++	edition = models.CharField(max_length=200, blank=True, null=True)
++	cover_img = models.ImageField(upload_to=upload_path)
+ 	def __unicode__(self):
+ 		return u'[%s] "%s" by %s' % (self.isbn, self.title, self.author,)
+-
+ 	objects = BookManager()
+ 
+ 
diff --git a/test/test.config b/test/test.config
index 2ad3ab9420606fc10271001c474fa76f6b72539e..2cbd58ee47ea494d89f487fb3904d6ba057543d8 100644
--- a/test/test.config
+++ b/test/test.config
@@ -7,5 +7,6 @@ declare -A test_scripts=(
             [ignoreFile.vader]='bootstrap'
             [addDir.vader]='newdir\/'
             [jump.vader]='books\/models.py|27|60|books\/isbn_search.py|54'
+            [commit.vader]='books/models.py|bootstrap'
 #[addSubmodule.vader]='subdjooks'
             )