Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/shkm/enummer. ๐ณ๏ธโ๐ Multi enums (aka flags) for Rails
activerecord bitwise-enum enums flags rails ruby
Something went wrong. Try again.
Ruby
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495# frozen_string_literal: true
require "test_helper"
class EnummerTest < ActiveSupport::TestCase def setup @user1 = User.new(permissions: %i[read write execute], facial_features: %i[nose], diets: %i[cigarettes alcohol], transport: %i[submarine], home: %i[box]) @user2 = User.new(permissions: %i[read write]) @user3 = User.new(permissions: %i[execute])
[@user1, @user2, @user3].map { |user| user.save && user.reload } end
test "it has a version number" do assert Enummer::VERSION end
test "get list of all valid values" do assert_equal %i[read write execute], User.permissions end
test "plain scopes return users with those values set" do assert_equal [@user1, @user2], User.read assert_equal [@user1, @user2], User.write assert_equal [@user1, @user3], User.execute end
test "with_ scope returns users without those bits set" do assert_equal [@user1, @user2], User.with_permissions(%i[read write]) end
test "not scopes return users without those bits set" do assert_equal [@user3], User.not_read assert_equal [@user3], User.not_write assert_equal [@user2], User.not_execute end
test "it serializes into a numeric" do assert_equal 3, @user2.permissions_before_type_cast end
test "it deserializes into an array of values" do assert_equal %i[read write], @user2.permissions end
test "it generates object query methods" do assert @user2.read? assert @user2.write? refute @user2.execute? end
test "setting a setter to true adds the value" do @user3.read = true
assert_equal %i[execute read], @user3.permissions end
test "setting a setter to false removes the value" do @user1.write = false
assert_equal %i[read execute], @user1.permissions end
test "using a bang method properly updates the persisted field" do @user3.read! @user3.reload
assert_equal %i[read execute], @user3.permissions end
test "methods respect _prefix" do assert @user1.facial_features_nose? refute @user1.facial_features_mouth? refute @user1.facial_features_eyes?
assert @user1.consumes_cigarettes? assert @user1.consumes_alcohol? refute @user1.consumes_greens? end
test "methods respect _suffix" do refute @user1.car_transport? refute @user1.truck_transport? assert @user1.submarine_transport?
assert @user1.box_home? refute @user1.apartment_home? refute @user1.house_home? endend