]> cat aescling's git repositories - mastodon.git/commitdiff
Add test coverage to CSS class generation (#2285)
authorJoël Quenneville <joel.quen@gmail.com>
Sun, 23 Apr 2017 04:04:32 +0000 (00:04 -0400)
committerEugen <eugen@zeonfederated.com>
Sun, 23 Apr 2017 04:04:32 +0000 (06:04 +0200)
The code that generates CSS is based on a lot of boolean conditions.
The possible combinations of these grows exponentially as we add more
conditions.

Since most of the code is conditional on a single boolean, we tested the
following:

1. All `false`
2. All `true`
3. Each individual flag set to `true`

The methods tested are:

* `StreamEntriesHelper#style_classes`
* `StreamEntriesHelper#microformats_classes`
* `StreamEntriesHelper#microformats_h_class`

app/helpers/stream_entries_helper.rb
spec/helpers/stream_entries_helper_spec.rb

index daa4a48e48e938e9b1a3e121798dc33ad984d466..a1dfe2ecfd5f8f5c0bd5d136bcca57eda3b9957c 100644 (file)
@@ -31,9 +31,13 @@ module StreamEntriesHelper
   end
 
   def microformats_h_class(status, is_predecessor, is_successor, include_threads)
-    return 'h-cite' if is_predecessor || status.reblog || is_successor
-    return 'h-entry' unless include_threads
-    ''
+    if is_predecessor || status.reblog? || is_successor
+      'h-cite'
+    elsif include_threads
+      ''
+    else
+      'h-entry'
+    end
   end
 
   def rtl?(text)
index 706a872f1ab581425e23a6603b03ebb3ce0c2dc7..a9e2d9c4beb03606de47dbf03af685f9fcf351e5 100644 (file)
@@ -15,6 +15,131 @@ RSpec.describe StreamEntriesHelper, type: :helper do
     end
   end
 
+  describe '#style_classes' do
+    it do
+      status = double(reblog?: false)
+      classes = helper.style_classes(status, false, false, false)
+
+      expect(classes).to eq 'entry'
+    end
+
+    it do
+      status = double(reblog?: true)
+      classes = helper.style_classes(status, false, false, false)
+
+      expect(classes).to eq 'entry entry-reblog'
+    end
+
+    it do
+      status = double(reblog?: false)
+      classes = helper.style_classes(status, true, false, false)
+
+      expect(classes).to eq 'entry entry-predecessor'
+    end
+
+    it do
+      status = double(reblog?: false)
+      classes = helper.style_classes(status, false, true, false)
+
+      expect(classes).to eq 'entry entry-successor'
+    end
+
+    it do
+      status = double(reblog?: false)
+      classes = helper.style_classes(status, false, false, true)
+
+      expect(classes).to eq 'entry entry-center'
+    end
+
+    it do
+      status = double(reblog?: true)
+      classes = helper.style_classes(status, true, true, true)
+
+      expect(classes).to eq 'entry entry-predecessor entry-reblog entry-successor entry-center'
+    end
+  end
+
+  describe '#microformats_classes' do
+    it do
+      status = double(reblog?: false)
+      classes = helper.microformats_classes(status, false, false)
+
+      expect(classes).to eq ''
+    end
+
+    it do
+      status = double(reblog?: false)
+      classes = helper.microformats_classes(status, true, false)
+
+      expect(classes).to eq 'p-in-reply-to'
+    end
+
+    it do
+      status = double(reblog?: false)
+      classes = helper.microformats_classes(status, false, true)
+
+      expect(classes).to eq 'p-comment'
+    end
+
+    it do
+      status = double(reblog?: true)
+      classes = helper.microformats_classes(status, true, false)
+
+      expect(classes).to eq 'p-in-reply-to p-repost-of'
+    end
+
+    it do
+      status = double(reblog?: true)
+      classes = helper.microformats_classes(status, true, true)
+
+      expect(classes).to eq 'p-in-reply-to p-repost-of p-comment'
+    end
+  end
+
+  describe '#microformats_h_class' do
+    it do
+      status = double(reblog?: false)
+      css_class = helper.microformats_h_class(status, false, false, false)
+
+      expect(css_class).to eq 'h-entry'
+    end
+
+    it do
+      status = double(reblog?: true)
+      css_class = helper.microformats_h_class(status, false, false, false)
+
+      expect(css_class).to eq 'h-cite'
+    end
+
+    it do
+      status = double(reblog?: false)
+      css_class = helper.microformats_h_class(status, true, false, false)
+
+      expect(css_class).to eq 'h-cite'
+    end
+
+    it do
+      status = double(reblog?: false)
+      css_class = helper.microformats_h_class(status, false, true, false)
+
+      expect(css_class).to eq 'h-cite'
+    end
+
+    it do
+      status = double(reblog?: false)
+      css_class = helper.microformats_h_class(status, false, false, true)
+
+      expect(css_class).to eq ''
+    end
+
+    it do
+      status = double(reblog?: true)
+      css_class = helper.microformats_h_class(status, true, true, true)
+
+      expect(css_class).to eq 'h-cite'
+    end
+  end
+  
   describe '#rtl?' do
     it 'is false if text is empty' do
       expect(helper).not_to be_rtl ''