public function testCRUD_Ok()
 {
     $client = TestEnvironment::client();
     TestEnvironment::createCustomer($client, 'TEST_CUST', 'Test Customer');
     TestEnvironment::createItem($client, 'TEST_ITEM', 'Test Item');
     // List
     $response = $client->get('/modules/api/sales/' . ST_SALESINVOICE, array('headers' => TestEnvironment::headers()));
     $this->assertEquals('200', $response->getStatusCode());
     $result = $response->getBody();
     $result = json_decode($result);
     $count0 = count($result);
     $this->assertEquals(0, $count0);
     // Add
     $ref = TestEnvironment::createId();
     //?XDEBUG_SESSION_START=cambell
     $response = $client->post('/modules/api/sales/', array('headers' => TestEnvironment::headers(), 'body' => array('trans_type' => ST_SALESINVOICE, 'ref' => $ref, 'comments' => 'comments', 'order_date' => '01/02/2013', 'delivery_date' => '03/04/2013', 'cust_ref' => 'cust_ref', 'deliver_to' => 'deliver_to', 'delivery_address' => 'delivery_address', 'phone' => 'phone', 'ship_via' => 'ship_via', 'location' => 'DEF', 'freight_cost' => '0', 'customer_id' => '2', 'branch_id' => '2', 'sales_type' => '1', 'dimension_id' => '0', 'dimension2_id' => '0', 'items' => array(0 => array('stock_id' => 'TEST_ITEM', 'qty' => '1', 'price' => '2', 'discount' => '0', 'description' => 'description')))));
     $this->assertEquals('200', $response->getStatusCode());
     $result = $response->getBody();
     $result = json_decode($result);
     // List again
     $response = $client->get('/modules/api/sales/' . ST_SALESINVOICE . '/', array('headers' => TestEnvironment::headers()));
     $this->assertEquals('200', $response->getStatusCode());
     $result = $response->getBody();
     $result = json_decode($result);
     $count1 = count($result);
     $this->assertEquals($count0 + 1, $count1);
     $id = $result[0]->trans_no;
     // Get by id
     $response = $client->get('/modules/api/sales/' . $id . '/' . ST_SALESINVOICE, array('headers' => TestEnvironment::headers()));
     $this->assertEquals('200', $response->getStatusCode());
     $result = $response->getBody();
     $result = json_decode($result);
     $expected = new stdClass();
     $expected->ref = $ref;
     $expected->comments = "comments";
     $expected->order_date = "01/02/2013";
     $expected->payment = "0";
     $expected->payment_terms = false;
     $expected->due_date = "03/04/2013";
     $expected->phone = "";
     $expected->cust_ref = "cust_ref";
     $expected->delivery_address = "delivery_address";
     $expected->ship_via = "0";
     $expected->deliver_to = "Test Customer";
     $expected->delivery_date = "03/04/2013";
     $expected->location = NULL;
     $expected->freight_cost = "0";
     $expected->email = "";
     $expected->customer_id = "2";
     $expected->branch_id = "2";
     $expected->sales_type = "1";
     $expected->dimension_id = "0";
     $expected->dimension2_id = "0";
     $item = new stdClass();
     $item->id = "2";
     $item->stock_id = "TEST_ITEM";
     $item->qty = 1;
     $item->units = "ea";
     $item->price = "2";
     $item->discount = "0";
     $item->description = "description";
     $expected->line_items = array($item);
     $expected->sub_total = 2;
     $expected->display_total = 2;
     $this->assertEquals($expected, $result);
     // Write back
     $response = $client->put('/modules/api/sales/' . $id . '/' . ST_SALESINVOICE, array('headers' => TestEnvironment::headers(), 'body' => array('trans_type' => ST_SALESINVOICE, 'ref' => $ref, 'comments' => 'new comments', 'order_date' => '02/03/2013', 'delivery_date' => '04/05/2013', 'cust_ref' => 'cust_ref', 'deliver_to' => 'new deliver_to', 'delivery_address' => 'new delivery_address', 'phone' => 'new phone', 'ship_via' => 'new ship_via', 'location' => 'DEF', 'freight_cost' => '0', 'customer_id' => '2', 'branch_id' => '2', 'sales_type' => '1', 'dimension_id' => '0', 'dimension2_id' => '0')));
     $this->assertEquals('200', $response->getStatusCode());
     $result = $response->getBody();
     $result = json_decode($result);
     // Get by id
     $response = $client->get('/modules/api/sales/' . $id . '/' . ST_SALESINVOICE, array('headers' => TestEnvironment::headers()));
     $this->assertEquals('200', $response->getStatusCode());
     $result = $response->getBody();
     $result = json_decode($result);
     $expected = new stdClass();
     $expected->ref = $ref;
     $expected->comments = "new comments";
     $expected->order_date = "02/03/2013";
     $expected->payment = "0";
     $expected->payment_terms = false;
     $expected->due_date = "04/05/2013";
     $expected->phone = "";
     $expected->cust_ref = "cust_ref";
     $expected->delivery_address = "delivery_address";
     $expected->ship_via = "0";
     $expected->deliver_to = "Test Customer";
     $expected->delivery_date = "04/05/2013";
     $expected->location = NULL;
     $expected->freight_cost = "0";
     $expected->email = "";
     $expected->customer_id = "2";
     $expected->branch_id = "2";
     $expected->sales_type = "1";
     $expected->dimension_id = "0";
     $expected->dimension2_id = "0";
     $item = new stdClass();
     $item->id = "2";
     $item->stock_id = "TEST_ITEM";
     $item->qty = 1;
     $item->units = "ea";
     $item->price = "2";
     $item->discount = "0";
     $item->description = "description";
     $expected->line_items = array($item);
     $expected->sub_total = 2;
     $expected->display_total = 2;
     $this->assertEquals($expected, $result);
     /* Delete is currently untested, and not implemented with standard FA
     		// Delete
     		$response = $client->delete('/modules/api/sales/' . $id, array(
     			'headers' => TestEnvironment::headers()
     		));
     		$this->assertEquals('200', $response->getStatusCode());
     		$result = $response->getBody();
     		$result = json_decode($result);
     
     		// List again
     		$response = $client->get('/modules/api/sales/', array(
     			'headers' => TestEnvironment::headers()
     		));
     
     		$this->assertEquals('200', $response->getStatusCode());
     		$result = $response->getBody();
     		$result = json_decode($result);
     
     		$count2 = count($result);
     		$this->assertEquals($count0, $count2);
     		*/
 }