Our Blog

Ongoing observations by End Point people

Spree Sample Data: Orders and Checkout

By Steph Skardal
October 11, 2010

A couple of months ago, I wrote about setting up Spree sample data in your Spree project with fixtures to encourage consistent feature development and efficient testing. I discussed how to create sample product data and provided examples of creating products, option types, variants, taxonomies, and adding product images. In this article, I’ll review the sample order structure more and give an example of data required for a sample order.

The first step for understanding how to set up Spree order sample data might require you to revisit a simplified data model to examine the elements that relate to a single order. See below for the interaction between the tables orders, checkouts, addresses, users, line items, variants, and products. Note that the data model shown here applies to Spree version 0.11 and there are significant changes with Spree 0.30.

Basic diagram for Spree order data model.

The data model shown above represents the data required to build a single sample order. An order must have a corresponding checkout and user. The checkout must have a billing and shipping address. To be valid, an order must also have line items that have variants and products. Here’s an example of a set of fixtures to create this bare minumum sample data:

  id: 1
  user_id: 1
  number: "R00000001"
  state: new
  item_total: 20.00
  created_at: <%= Time.now %>
  completed_at: <%= Time.now %>
  total: 20.00
  adjustment_total: 0.00
  bill_address: address_1
  ship_address: address_1
  email: 'spree@example.com'
  order_id: 1
  state: complete
  shipping_method: canada_post
  firstname: Steph
  lastname: Powell
  address1: 12360 West Carolina Drive
  city: Lakewood
  state_id: 889445952
  zipcode: 80228
  country_id: 214
  phone: 000-000-0000
  order_id: 1
  variant: test_variant
  quantity: 2
  price: 10.00
  product: test_product
  price: 10.00
  cost_price: 5.00
  count_on_hand: 10
  is_master: true
  sku: 1-master
  name: Test Product 1
  description: Lorem ipsum...
  available_on: <%= Time.zone.now.to_s(:db) %>
  count_on_hand: 10
  permalink: test-product
#copy Spree core to create a user with id=1

After adding fixtures for the minimal order data required, you might be interested in adding peripheral data to test custom work or test new feature development. This peripheral data might include:

  • shipping methods: A checkout belongs to a shipping method, and has many shipping rates and shipments.
  • shipments: An order has many shipments. Shipments are also tied to the shipping method.
  • inventory units: An order has many inventory units, corresponding to each item in the order.
  • payments: Orders and checkouts have many payments that must cover the cost of an order. Multiple payments can be assigned to each order.
  • adjustments: Shipping charges and tax charges are tracked by adjustments, which belong to orders.
  • return authorizations: Return authorizations belong to orders and track returns on orders, tied to inventory_units in the order that are returned.

In my experience, I’ve worked with a few Spree projects where we created fixtures for setting peripheral sample data to test custom shipping and inventory management. Again, note that the data models described in this article are in place in Spree <= 0.11.0. Spree 0.30 will introduce data model changes to be discussed at a later date.

ecommerce rails spree


Popular Tags


Search our blog