Index: branches/features/purchaseOrders/test/unit/PurchaseOrderServiceTests.groovy
===================================================================
--- branches/features/purchaseOrders/test/unit/PurchaseOrderServiceTests.groovy	(revision 896)
+++ branches/features/purchaseOrders/test/unit/PurchaseOrderServiceTests.groovy	(revision 898)
@@ -1,3 +1,4 @@
 import grails.test.*
+import com.henyo.BaseUnitTestCase
 import static org.junit.Assert.assertThat
 import static org.hamcrest.CoreMatchers.equalTo
@@ -6,5 +7,5 @@
  * Unit tests for PurchaseOrderService class.
  */
-class PurchaseOrderServiceTests extends GrailsUnitTestCase {
+class PurchaseOrderServiceTests extends BaseUnitTestCase {
     def pos = new PurchaseOrderService()
 
@@ -21,7 +22,45 @@
     }
 
+    void testSavePurchaseOrderNumberExpectCommit() {
+        mockForTransaction(PurchaseOrderNumber)
+
+        def p = [value: "P100"]
+        def r = pos.savePurchaseOrderNumber(p)
+
+        assert ! r.error
+        assert PurchaseOrderNumber.count() == 1
+    }
+
+    void testSavePurchaseOrderNumberExpectRollback() {
+        mockForTransaction(PurchaseOrderNumber, true)
+
+        def p = [value: ""]
+        def r = pos.savePurchaseOrderNumber(p)
+
+        assert r.error
+        assert PurchaseOrderNumber.count() == 0
+    }
+
+    void testSavePurchaseOrderNumberRangeExpectCommit() {
+        mockForTransaction(PurchaseOrderNumber)
+
+        def r = pos.savePurchaseOrderNumberRange("P", 1000, 1009)
+
+        assert ! r.error
+        assert PurchaseOrderNumber.count() == 10
+    }
+
+    void testSavePurchaseOrderNumberRangeExpectRollback() {
+        mockForTransaction(PurchaseOrderNumber, true)
+
+        def r = pos.savePurchaseOrderNumberRange("P", -1000, 1009)
+
+        assert r.error
+        assert PurchaseOrderNumber.count() == 0
+    }
+
     void testFindsFirstUnusedPurchaseOrderWhenAllUnused() {
-        createTenPurchaseOrderNumbers()
-        assertThat PurchaseOrderNumber.list().size(), equalTo(10)
+        mockForTransaction(PurchaseOrderNumber)
+        pos.savePurchaseOrderNumberRange("P", 1000, 1009)
 
         def next = pos.findNextUnusedPurchaseOrderNumber()
@@ -31,5 +70,6 @@
 
     void testFindsFirstUnusuedPurchaseOrderWhenSomeUsed() {
-        createTenPurchaseOrderNumbers()
+        mockForTransaction(PurchaseOrderNumber)
+        pos.savePurchaseOrderNumberRange("P", 1000, 1009)
         createPurchaseOrders(4)
 
@@ -40,5 +80,6 @@
 
     void testFindsNullIfNoUnusedPurchaseOrderNumbers() {
-        createTenPurchaseOrderNumbers()
+        mockForTransaction(PurchaseOrderNumber)
+        pos.savePurchaseOrderNumberRange("P", 1000, 1009)
         createPurchaseOrders(10)
 
@@ -49,5 +90,6 @@
 
     void testGetOrCreatePurchaseOrderWithExistingOrder() {
-        createTenPurchaseOrderNumbers()
+        mockForTransaction(PurchaseOrderNumber)
+        pos.savePurchaseOrderNumberRange("P", 1000, 1009)
         createPurchaseOrders(3)
         def params=[purchaseOrderNumber:[id:2]]
@@ -60,5 +102,6 @@
 
     void testGetOrCreatePurchaseOrderWithNoExistingOrder() {
-        createTenPurchaseOrderNumbers()
+        mockForTransaction(PurchaseOrderNumber)
+        pos.savePurchaseOrderNumberRange("P", 1000, 1009)
         createPurchaseOrders(3)
         createSuppliers(1)
@@ -72,5 +115,6 @@
 
     void testFindsDraftPurchaseOrderNumbers() {
-        createTenPurchaseOrderNumbers()
+        mockForTransaction(PurchaseOrderNumber)
+        pos.savePurchaseOrderNumberRange("P", 1000, 1009)
         createPurchaseOrders(3)
         releaseOrder(PurchaseOrder.get(2))
@@ -103,10 +147,4 @@
     }
 
-    private createTenPurchaseOrderNumbers() {
-        for (int i = 1000; i < 1010; i++) {
-            new PurchaseOrderNumber(value: "P${i}").save(failOnError: true)
-        }
-    }
-
     def releaseOrder(PurchaseOrder po) {
         po.ordered = new Date()
