Shishir Kakaraddi 5374a1378e initial commit
2018-01-31 16:20:40 -08:00

193 lines
3.9 KiB
Ruby

RSpec.shared_context 'movie class' do
# Movie, Actor Classes and serializers
before(:context) do
# models
class Movie
attr_accessor :id, :name, :release_year, :actor_ids, :owner_id, :movie_type_id
def actors
actor_ids.map do |id|
a = Actor.new
a.id = id
a.name = "Test #{a.id}"
a.email = "test#{a.id}@test.com"
a
end
end
def movie_type
mt = MovieType.new
mt.id = movie_type_id
mt.name = 'Episode'
mt
end
def cache_key
"#{id}"
end
end
class Actor
attr_accessor :id, :name, :email
end
class MovieType
attr_accessor :id, :name
end
# serializers
class MovieSerializer
include FastJsonapi::ObjectSerializer
set_type :movie
attributes :name, :release_year
has_many :actors
belongs_to :owner, record_type: :user
belongs_to :movie_type
end
class CachingMovieSerializer
include FastJsonapi::ObjectSerializer
set_type :movie
attributes :name, :release_year
has_many :actors
belongs_to :owner, record_type: :user
belongs_to :movie_type
cache_options enabled: true
end
class CachingMovieWithHasManySerializer
include FastJsonapi::ObjectSerializer
set_type :movie
attributes :name, :release_year
has_many :actors, cached: true
belongs_to :owner, record_type: :user
belongs_to :movie_type
cache_options enabled: true
end
class ActorSerializer
include FastJsonapi::ObjectSerializer
set_type :actor
attributes :name, :email
end
class MovieTypeSerializer
include FastJsonapi::ObjectSerializer
set_type :movie_type
attributes :name
end
end
# Namespaced MovieSerializer
before(:context) do
# namespaced model stub
module AppName
module V1
class MovieSerializer
include FastJsonapi::ObjectSerializer
# to test if compute_serializer_name works
end
end
end
end
# Hyphenated keys for the serializer
before(:context) do
class HyphenMovieSerializer
include FastJsonapi::ObjectSerializer
use_hyphen
set_type :movie
attributes :name, :release_year
has_many :actors
belongs_to :owner, record_type: :user
belongs_to :movie_type
end
class HyphenMovieTypeSerializer
include FastJsonapi::ObjectSerializer
use_hyphen
set_type :movie_type
attributes :name
end
end
# Movie and Actor struct
before(:context) do
MovieStruct = Struct.new(
:id, :name, :release_year, :actor_ids, :actors, :owner_id, :owner, :movie_type_id
)
ActorStruct = Struct.new(
:id, :name, :email
)
end
after(:context) do
classes_to_remove = %i[
Movie
MovieSerializer
Actor
ActorSerializer
MovieType
MovieTypeSerializer
AppName::V1::MovieSerializer
MovieStruct
ActorStruct
HyphenMovieSerializer
]
classes_to_remove.each do |klass_name|
Object.send(:remove_const, klass_name) if Object.constants.include?(klass_name)
end
end
let(:movie_struct) do
actors = []
3.times.each do |id|
a = ActorStruct.new
a[:id] = id
a[:name] = id.to_s
actors << a
end
m = MovieStruct.new
m[:id] = 23
m[:name] = 'struct movie'
m[:release_year] = 1987
m[:actor_ids] = [1,2,3]
m[:owner_id] = 3
m[:movie_type_id] = 2
m[:actors] = actors
m
end
let(:movie) do
m = Movie.new
m.id = 232
m.name = 'test movie'
m.actor_ids = [1, 2, 3]
m.owner_id = 3
m.movie_type_id = 1
m
end
def build_movies(count)
count.times.map do |i|
m = Movie.new
m.id = i + 1
m.name = 'test movie'
m.actor_ids = [1, 2, 3]
m.owner_id = 3
m.movie_type_id = 1
m
end
end
end