diff --git a/app/models/site.rb b/app/models/site.rb index a7d6869..71cb7bc 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -15,8 +15,12 @@ class Site < ApplicationRecord has_many :invitades, -> { where('roles.rol = ?', 'invitade') }, through: :roles, source: :usuarie - # Carga el sitio Jekyll una vez que se inicializa el modelo + # Clonar el directorio de esqueleto antes de crear el sitio + before_create :clone_skel! + # Carga el sitio Jekyll una vez que se inicializa el modelo o después + # de crearlo after_initialize :load_jekyll! + after_create :load_jekyll! attr_accessor :jekyll, :collections @@ -343,8 +347,18 @@ class Site < ApplicationRecord private + # Clona el esqueleto de Sutty para crear el sitio nuevo, no pasa nada + # si el sitio ya existe + def clone_skel! + return if File.directory? path + + Rugged::Repository.clone_at ENV['SKEL_SUTTY'], path + end + # Carga el sitio Jekyll def load_jekyll! + return unless name + Dir.chdir(path) do @jekyll ||= Site.load_jekyll(Dir.pwd) end diff --git a/test/models/site_test.rb b/test/models/site_test.rb index ce6e475..98e9940 100644 --- a/test/models/site_test.rb +++ b/test/models/site_test.rb @@ -3,81 +3,19 @@ require 'test_helper' class SiteTest < ActiveSupport::TestCase - setup do - @user = Usuaria.find('f@kefir.red') - @path = File.join(@user.path, 'cyber-women.com') - reset_git_repo(@path) - @site = @user.sites.select { |s| s.name == 'cyber-women.com' }.first - @site.read + test 'se puede crear un sitio' do + site = create :site + + assert site.valid? + # TODO: Mover a la validación del sitio o hacer algo similar + assert File.directory?(site.path) + assert File.directory?(File.join(site.path, '.git')) end - test 'El directorio es un sitio jekyll' do - assert Site.jekyll?(@path) - end + test 'se puede leer un sitio' do + site = create :site, name: 'sutty.nl' - test 'Un directorio se puede cargar como un sitio Jekyll' do - jekyll = Site.load_jekyll @path - - assert_equal Jekyll::Site, jekyll.class - end - - test 'Los artículos no están ordenados si a alguno le falta orden' do - assert_not @site.ordered? - assert @site.reorder_collection! - assert @site.ordered? - end - - test 'No podemos poner órdenes arbitrarios' do - total = @site.posts.count - new_order = Hash[total.times.map { |i| [i.to_s, rand(total)] }] - - assert_not @site.reorder_collection('posts', new_order) - end - - test 'Si les damos un orden alternativo los reordenamos' do - total = @site.posts.count - order = total.times.map(&:to_s) - new_order = Hash[order.zip(order.shuffle)] - - assert @site.reorder_collection('posts', new_order) - - # podemos hacer este test porque reordenar los posts no ordena el - # array - new_order.each do |k, v| - v = v.to_i - k = k.to_i - assert_equal v, @site.posts[k].order - end - end - - test 'Podemos reordenar solo una parte de los artículos' do - total = @site.posts.count - order = (total - rand(total - 1)).times.map(&:to_s) - new_order = Hash[order.zip(order.shuffle)] - - assert @site.reorder_collection('posts', new_order) - - # podemos hacer este test porque reordenar los posts no ordena el - # array - new_order.each do |k, v| - v = v.to_i - k = k.to_i - assert_equal v, @site.posts[k].order - end - end - - test 'Un sitio tiene traducciones' do - assert_equal %w[ar es en], @site.translations - assert @site.i18n? - end - - test 'El idioma por defecto es el idioma actual de la plataforma' do - assert_equal 'es', @site.default_lang - end - - test 'El sitio tiene layouts' do - assert_equal %w[anexo archive default feed header.ar header.en - header.es header license.ar license.en license.es license pandoc - politicas sesion simple style ].sort, @site.layouts + assert site.valid? + assert !site.posts.empty? end end