require 'spec_helper' describe Admin::GroupsController do before do @admin = log_in(:admin) end it "is a subclass of AdminController" do (Admin::GroupsController < Admin::AdminController).should be_true end it "produces valid json for groups" do group = Fabricate.build(:group, name: "test") group.add(@admin) group.save xhr :get, :index response.status.should == 200 ::JSON.parse(response.body).keep_if{|r| r["id"] == group.id}.should == [{ "id"=>group.id, "name"=>group.name, "user_count"=>1, "automatic"=>false }] end it "is able to refresh automatic groups" do Group.expects(:refresh_automatic_groups!).returns(true) xhr :post, :refresh_automatic_groups response.status.should == 200 end context '.destroy' do it "returns a 422 if the group is automatic" do group = Fabricate(:group, automatic: true) xhr :delete, :destroy, id: group.id response.status.should == 422 Group.where(id: group.id).count.should == 1 end it "is able to destroy a non-automatic group" do group = Fabricate(:group) xhr :delete, :destroy, id: group.id response.status.should == 200 Group.where(id: group.id).count.should == 0 end end context '.create' do let(:usernames) { @admin.username } it "is able to create a group" do xhr :post, :create, group: { usernames: usernames, name: "bob" } response.status.should == 200 groups = Group.where(name: "bob").to_a groups.count.should == 1 groups[0].usernames.should == usernames groups[0].name.should == "bob" end it "strips spaces from group name" do lambda { xhr :post, :create, group: { usernames: usernames, name: " bob " } }.should_not raise_error(ActiveRecord::RecordInvalid) Group.where(name: "bob").count.should == 1 end end it "is able to update group members" do user1 = Fabricate(:user) user2 = Fabricate(:user) group = Fabricate(:group) xhr :put, :update, id: group.id, name: 'fred', group: { name: 'fred', usernames: "#{user1.username},#{user2.username}" } group.reload group.users.count.should == 2 group.name.should == 'fred' end end