my-grocery-price-book/www

View on GitHub
app/javascript/__test__/components/book.spec.jsx

Summary

Maintainability
D
2 days
Test Coverage
import React from 'react';
import { mount } from 'enzyme';
import Book from '../../src/PriceBook/components/book';

describe('Book', function() {
  var react_dom;

  beforeEach(function() {
    react_dom = mount(
        <Book pages={[{id: 1, name: 'Bread', category: 'Bakery', unit: 'grams',
          best_entry: {product_name: 'Woolworths White Bread', amount: 1,
            package_size: 700, package_unit: 'grams',
            price_per_package: 700 * 0.77,
            price_per_unit: 0.77, store_name: 'Woolworths',
            location: 'Cape Town', total_price: 13.95 }},
          {id: 2, name: 'Large Eggs', category: 'Fresh', unit: 'items'}]}/>
    );
  });

  it("works", function () {
    expect(react_dom.name()).toEqual('Book');
  });

  describe('Filtering', function() {
    var input_filter;

    beforeEach(function() {
      input_filter = react_dom.find('input');
    });

    it("filters out on name", function () {
      input_filter.simulate('change', {target: {value: 'Bre'}});

      const bread = react_dom.find('[data-page-name="Bread"]');
      expect(bread.prop('style')).toBeNull();
      const eggs = react_dom.find('[data-page-name="Large Eggs"]');
      expect(eggs.prop('style')).toEqual({display: 'none'});
    });

    it("filters out on name case insensitive", function () {
      input_filter.simulate('change', {target: {value: 'bre'}});

      const bread = react_dom.find('[data-page-name="Bread"]');
      expect(bread.prop('style')).toBeNull();
      const eggs = react_dom.find('[data-page-name="Large Eggs"]');
      expect(eggs.prop('style')).toEqual({display: 'none'});
    });

    it("filters out on category", function () {
      input_filter.simulate('change', {target: {value: 'Fre'}});

      const bread = react_dom.find('[data-page-name="Bread"]');
      expect(bread.prop('style')).toEqual({display: 'none'});
      const eggs = react_dom.find('[data-page-name="Large Eggs"]');
      expect(eggs.prop('style')).toBeNull();
    });

    it("filters out on category case insensitive", function () {
      input_filter.simulate('change', {target: {value: 'fre'}});

      const bread = react_dom.find('[data-page-name="Bread"]');
      expect(bread.prop('style')).toEqual({display: 'none'});
      const eggs = react_dom.find('[data-page-name="Large Eggs"]');
      expect(eggs.prop('style')).toBeNull();
    });
  });
});