Skip to content

Importer setup

Bess Sadler edited this page Feb 4, 2019 · 6 revisions

Importer setup goals Goals:

Setup

(OPTIONAL) Save your current changes

If you have changes in your current branch -- you can check on this via git status -- you'll want to save those before starting this lesson (which uses a separate branch):

  • git checkout -b your_branch_name
  • git add .
  • git commit -m 'checkpoint before beginning search results and facets'

Check out working branch

git checkout search_results_and_facets

NOTE: If you make experimental changes and want to get back to the minimal code state necessary to run this lesson, you can check the starting code out again using:
git checkout search_results_and_facets

Preparing test fixtures

One of the first and most important tasks in writing an importer is to get a representative sample of the data that will be imported. This sample can be used to inform conversations about importer requirements, and ideally it will also become fixture data or test fixtures for the automated test suite.

A test fixture is a fixed state of a set of objects used as a baseline for running tests. The purpose of a test fixture is to ensure that there is a well known and fixed environment in which tests are run so that results are repeatable. Examples of fixtures:

  • Preparation of input data and setup/creation of fake or mock objects
  • Loading a database with a specific, known set of data
  • Copying a specific known set of files creating a test fixture will create a set of objects initialized to certain states.

-- Pat Hawks, junit4: Test Fixtures

In the case of this example, we will be writing a CSV importer. Our expected input is a file containing comma separated values, which match a subset of default Hyrax fields. We will also need binary file attachments. In this example, we'll use image files.

1. Create a folder for fixture data

  mkdir spec/fixtures
  mkdir spec/fixtures/images
  mkdir spec/fixtures/csv_files

2. Populate the CSV folder

Make a file in spec/fixtures/csv_files called three_line_example.csv. Paste this content into it:

  dog.png,"A Cute Dog",https://www.pexels.com/photo/animal-blur-canine-close-up-551628/
  cat.png,"An Interesting Cat",https://www.pexels.com/photo/person-holding-white-cat-1383397/
  birds.png,"A Flock of Birds",https://www.pexels.com/photo/animal-avian-beak-birds-203088/

Make another file in spec/fixtures/csv_files called one_line_example.csv. Paste this content into it:

  dog.png,"A Cute Dog",https://www.pexels.com/photo/animal-blur-canine-close-up-551628/

Make another file in spec/fixtures/csv_files called modular_input.csv. Paste this content into it:

  title,source,visibility,files
  "A Cute Dog",https://www.pexels.com/photo/animal-blur-canine-close-up-551628/,open,dog.png
  "An Interesting Cat",https://www.pexels.com/photo/person-holding-white-cat-1383397/,open,cat.png|~|birds.png
  "A Flock of Birds",https://www.pexels.com/photo/animal-avian-beak-birds-203088/,open,birds.png

3. Populate the image files

Copy the image files into the image folder:

  wget https://github.com/RepoCamp/ucla2019/raw/importer_setup/spec/fixtures/images/birds.png
  wget https://github.com/RepoCamp/ucla2019/raw/importer_setup/spec/fixtures/images/cat.png
  wget https://github.com/RepoCamp/ucla2019/raw/importer_setup/spec/fixtures/images/dog.png

Note: You can see the changes we made in this section on github.

For discussion:

  1. Why create subdirectories in the fixtures folder?
  2. What other data can you imagine adding to the fixtures folder over time?
  3. What makes a good fixture object?