Tuesday, 17 September 2013

mongoid has_many belongs_to controller test not passing

mongoid has_many belongs_to controller test not passing

I'm having trouble getting my controller to set a has_many/belongs_to
association. I'm using mongodb with mongoid and I am totally new to it, so
perhaps I'm missing something related to that? I normally have no problem
getting this to work with relational databases.
Models:
class User
include Mongoid::Document
include Mongoid::Timestamps::Created
include Mongoid::Timestamps::Created
field :team_id
belongs_to :team, inverse_of: :user
end
class Team
include Mongoid::Document
include Mongoid::Timestamps::Created
include Mongoid::Timestamps::Created
field :name
field :slug
field :description
embeds_one :leader, class_name: 'User'
field :holiday_days_per_year, type: Integer
field :hours_per_day, type: Integer
field :organisation_id, type: Integer
has_many :users, inverse_of: :team
def users=(user_ids)
self.users.clear
user_ids.each do |id|
self.users << User.find(id)
end
end
end
controller:
class TeamsController < ApplicationController
def create
@team = Team.new(team_params)
if @team.save
render json: @team, status: :created, location: @team
else
render json: @team.errors, status: :unprocessable_entity
end
end
private
def team_params
params.permit(:name, :holiday_days_per_year, :hours_per_day, :leader,
:users => [])
end
end
This test always fails because team.users is empty.
require 'spec_helper'
describe TeamsController do
let(:user) { create :user }
let(:valid_attributes){ { "name" => "MyString", "hours_per_day" => 5,
"holiday_days_per_year" => 2, "users" => [user.id]} }
let(:valid_session) { {} }
describe "GET index" do
it "assigns all teams as @teams" do
team = Team.create! valid_attributes
get :index, {}, valid_session
assigns(:teams).should eq([team])
end
end
end
However this model spec passes fine:
require 'spec_helper'
describe Team do
let(:team){ Team.create name: 'my cool team', holiday_days_per_year: 1,
hours_per_day: 1 }
let(:user){ create :user }
it "can assign users" do
team.users = [user.id]
expect(team.users).to eq [user]
end
end

No comments:

Post a Comment