From d0962d6e5a2ed1aec57e04bba661c080b759ddb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Fri, 5 Aug 2016 13:03:49 +0200 Subject: [PATCH] FIX: serve category images from the CDN --- app/serializers/basic_category_serializer.rb | 10 +++++ .../basic_category_serializer_spec.rb | 40 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 spec/serializers/basic_category_serializer_spec.rb diff --git a/app/serializers/basic_category_serializer.rb b/app/serializers/basic_category_serializer.rb index cd5c6c71699..51fcf7fe4bd 100644 --- a/app/serializers/basic_category_serializer.rb +++ b/app/serializers/basic_category_serializer.rb @@ -40,4 +40,14 @@ class BasicCategorySerializer < ApplicationSerializer def notification_level object.notification_level end + + def logo_url + url = object.logo_url + url.present? && UrlHelper.is_local(url) ? UrlHelper.schemaless(UrlHelper.absolute(url)) : url + end + + def background_url + url = object.background_url + url.present? && UrlHelper.is_local(url) ? UrlHelper.schemaless(UrlHelper.absolute(url)) : url + end end diff --git a/spec/serializers/basic_category_serializer_spec.rb b/spec/serializers/basic_category_serializer_spec.rb new file mode 100644 index 00000000000..8e40639625a --- /dev/null +++ b/spec/serializers/basic_category_serializer_spec.rb @@ -0,0 +1,40 @@ +require "rails_helper" +require_dependency "category" + +describe BasicCategorySerializer do + + let(:cdn) { "//my.awesome.cdn" } + let(:upload) { Fabricate(:upload) } + let(:json) { BasicCategorySerializer.new(category, scope: Guardian.new, root: false).as_json } + + describe "logo_url" do + + let(:category) { Fabricate(:category, logo_url: upload.url) } + + it "uses absolute schemaless URL" do + expect(json[:logo_url]).to eq("//test.localhost#{upload.url}") + end + + it "uses CDN when available" do + Discourse.stubs(:asset_host).returns(cdn) + expect(json[:logo_url]).to eq("#{cdn}#{upload.url}") + end + + end + + describe "background_url" do + + let(:category) { Fabricate(:category, background_url: upload.url) } + + it "uses absolute schemaless URL" do + expect(json[:background_url]).to eq("//test.localhost#{upload.url}") + end + + it "uses CDN when available" do + Discourse.stubs(:asset_host).returns(cdn) + expect(json[:background_url]).to eq("#{cdn}#{upload.url}") + end + + end + +end