vzaar/vzaar-api-ruby

View on GitHub
examples/category/create_update_delete_spec.rb

Summary

Maintainability
A
0 mins
Test Coverage
require_relative './../spec_helper'

module VzaarApi
  describe 'Category: Create / Update / Delete' do

    let(:described_class) { Category }

    context 'when user is authenticated' do
      before { setup_for :account_owner }

      let(:attrs) { { name: 'new SDK category' } }

      it 'creates, updates and deletes a resource' do
        # name is required
        expect{described_class.create}.to raise_error(
          Error, "Invalid parameters: name is missing"
        )

        # create new category tree
        category = described_class.create attrs
        expect(category.name).to eq 'new SDK category'
        expect(category.parent_id).to be_nil
        expect(category.depth).to eq 0

        subcategory = described_class.create attrs.merge(parent_id: category.id)
        expect(subcategory.name).to eq 'new SDK category'
        expect(subcategory.parent_id).to eq category.id
        expect(subcategory.depth).to eq 1

        subsubcategory = described_class.create attrs.merge(parent_id: subcategory.id)
        expect(subsubcategory.name).to eq 'new SDK category'
        expect(subsubcategory.parent_id).to eq subcategory.id
        expect(subsubcategory.depth).to eq 2

        expect(described_class.find(category.id).tree_children_count).to eq 2
        expect(described_class.find(category.id).node_children_count).to eq 1
        expect(described_class.find(subcategory.id).node_children_count).to eq 1

        # can't create subcategories deeper than account will allow
        expect{
          described_class.create(attrs.merge(parent_id: subsubcategory.id))
        }.to raise_error(
          Error, 'Invalid parameters: Validation failed: Category depth must not exceed 3'
        )

        # perform update
        name = "updated at: #{Time.now.utc}"
        category.name = name
        category.save
        expect(category.name).to eq name

        # move category and children to top level
        subcategory.move_to_root = true
        subcategory.save
        expect(subcategory.parent_id).to be_nil
        expect(subcategory.depth).to eq 0
        expect(described_class.find(subsubcategory.id).depth).to eq 1
        expect(described_class.find(category.id).node_children_count).to eq 0

        expect(described_class.find(category.id).tree_children_count).to eq 0
        expect(described_class.find(category.id).node_children_count).to eq 0
        expect(described_class.find(subcategory.id).node_children_count).to eq 1

        # move category and children to a new parent
        subcategory.parent_id = category.id
        subcategory.save
        expect(subcategory.parent_id).to eq category.id
        expect(subcategory.depth).to eq 1
        expect(subsubcategory.depth).to eq 2

        expect(described_class.find(category.id).tree_children_count).to eq 2
        expect(described_class.find(category.id).node_children_count).to eq 1
        expect(described_class.find(subcategory.id).node_children_count).to eq 1

        # can't move if it will exceed category depth limit
        new_cat = described_class.create(attrs)
        new_cat.parent_id = subsubcategory.id
        expect{new_cat.save}.to raise_error(
          Error, 'Invalid parameters: Category depth must not exceed 3'
        )

        # delete categories
        subsubcategory.delete
        expect{ described_class.find(subsubcategory.id) }.to raise_error(
            Error, 'Not found: Resource cannot be found')

        # deleting parent deletes children
        category.delete
        expect{ described_class.find(category.id) }.to raise_error(
            Error, 'Not found: Resource cannot be found')

        expect{ described_class.find(subcategory.id) }.to raise_error(
            Error, 'Not found: Resource cannot be found')

        new_cat.delete # keep things tidy
      end
    end

  end
end