require 'spec_helper'

describe Admin::GroupsController do
  it "is a subclass of AdminController" do
    (Admin::GroupsController < Admin::AdminController).should be_true
  end

  it "produces valid json for groups" do
    admin = log_in(:admin)
    group = Fabricate.build(:group, name: "test")
    group.add(admin)
    group.save

    xhr :get, :index
    response.status.should == 200
    ::JSON.parse(response.body).should == [{
      "id"=>group.id,
      "name"=>group.name,
      "user_count"=>1,
      "automatic"=>false
    }]
  end

  it "is able to refresh automatic groups" do
    admin = log_in(:admin)
    Group.expects(:refresh_automatic_groups!).returns(true)

    xhr :post, :refresh_automatic_groups
    response.status.should == 200
  end

  it "is able to destroy a group" do
    log_in(:admin)
    group = Fabricate(:group)

    xhr :delete, :destroy, id: group.id
    response.status.should == 200

    Group.count.should == 0
  end

  it "is able to create a group" do
    a = log_in(:admin)

    xhr :post, :create, group: {
      usernames: a.username,
      name: "bob"
    }

    response.status.should == 200

    groups = Group.all.to_a

    groups.count.should == 1
    groups[0].usernames.should == a.username
    groups[0].name.should == "bob"

  end

  it "is able to update group members" do
    user1 = Fabricate(:user)
    user2 = Fabricate(:user)
    group = Fabricate(:group)
    log_in(:admin)

    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