# encoding: utf-8 require 'spec_helper' describe MediaMagick::Model do describe 'including class methods' do before(:all) do @klass = User end it "should includes .attaches_many" do @klass.should respond_to(:attaches_many) end it "should includes .attaches_one" do @klass.should respond_to(:attaches_one) end end describe '.attaches_many' do before(:all) do @klass = Album @instance = @klass.new end it 'should create a "embeds_many" relationship with photos' do @klass.relations['photos'].relation.should eq(Mongoid::Relations::Embedded::Many) end it 'should create a relationship with photos through AlbumPhotos model' do @klass.relations['photos'].class_name.should eq('AlbumPhotos') end describe "naming relations" do it "should transform related compound name classes to camel case" do @instance.should respond_to(:compound_name_files) @instance.compound_name_files.build.class.should eq(AlbumCompoundNameFiles) end end describe 'allow_videos' do let(:album) { Album.create } subject { album.photos_and_videos.create } it 'should include type field' do subject.fields.should include('type') end it 'should include video field' do subject.fields.should include('video') end it 'should accept youtube videos' do video = album.photos_and_videos.create(video: 'youtube.com/watch?v=FfUHkPf9D9k') video.type.should eq('video') video.url.should eq("/uploads/album_photos_and_videos/photos_and_video/#{video.id}/FfUHkPf9D9k.jpg") video.thumb.url.should eq("/uploads/album_photos_and_videos/photos_and_video/#{video.id}/thumb_FfUHkPf9D9k.jpg") video.source.should eq('') video.source(width: 156, height: 88).should eq('') end it 'should accept vimeo videos' do video = album.photos_and_videos.create(video: 'vimeo.com/43401461') video.type.should eq('video') video.url.should eq("/uploads/album_photos_and_videos/photos_and_video/#{video.id}/43401461.jpg") video.thumb.url.should eq("/uploads/album_photos_and_videos/photos_and_video/#{video.id}/thumb_43401461.jpg") video.source.should eq('') video.source(width: 156, height: 88).should eq('') end end describe '#photos' do subject { @instance.photos.new } it { should be_an_instance_of(AlbumPhotos) } it 'should perform a block in the context of the class' do @klass.attaches_many(:documents) do def test_method; end end @instance.documents.new.should respond_to(:test_method) end it "should be ordered by ascending priority" do @instance = @klass.create photo2 = @instance.photos.create(priority: 1) photo1 = @instance.photos.create(priority: 0) @instance.reload.photos.should == [photo1, photo2] end it "should respond to priority" do subject.fields.include?(:priority) end it "should have priority 0 as default" do subject.priority.should be(0) end describe '#photo' do subject { @instance.photos.new.photo } it { should be_a_kind_of(CarrierWave::Uploader::Base) } describe 'custom_uploader' do before(:all) do class AmazonS3Uploader < CarrierWave::Uploader::Base storage :file end @klass.attaches_many :musics, uploader: AmazonS3Uploader end subject { @instance.musics.new } it { should respond_to(:music) } it { subject.music.should be_a_instance_of(AmazonS3Uploader) } end end end end describe '.attaches_one' do before(:all) do @klass = User @instance = @klass.new end it 'should create an embedded model' do @klass.relations['photo'].class_name.should eq('UserPhoto') end it 'should create a "embeds_one" relation' do @klass.relations['photo'].relation.should eq(Mongoid::Relations::Embedded::One) end describe "naming relations" do it "should transform related compound name classe to camel case" do @instance.should respond_to(:compound_name_file) @instance.build_compound_name_file.class.should eq(UserCompoundNameFile) end end describe "related method" do subject { @instance.build_photo } it { should be_an_instance_of(UserPhoto) } it 'should perform a block in the context of the class' do @klass.attaches_one(:image) do def test_method; end end @instance.build_image.should respond_to(:test_method) end end end end