@@ -960,7 +960,52 @@ def test_respond_to
960960 assert_respond_to matz , :name
961961 assert_respond_to matz , :name=
962962 assert_respond_to matz , :name?
963- assert_not matz . respond_to? ( :super_scalable_stuff )
963+ assert_not_respond_to matz , :super_scalable_stuff
964+ assert_not_respond_to matz , :super_scalable_stuff=
965+ end
966+
967+ def test_respond_to_known_attributes
968+ previous_schema = Person . schema
969+ Person . schema = { name : "string" }
970+
971+ person = Person . new
972+
973+ assert_respond_to person , :name
974+ assert_respond_to person , :name=
975+ assert_not_respond_to person , :super_scalable_stuff
976+ assert_not_respond_to person , :super_scalable_stuff=
977+ ensure
978+ Person . schema = previous_schema
979+ end
980+
981+ def test_reading_an_unknown_attribute_raises_NoMethodError
982+ assert_raises NoMethodError , match : "unknown_attribute" do
983+ Post . new . unknown_attribute
984+ end
985+ end
986+
987+ def test_writing_an_unknown_attribute_assigns_a_value_that_can_be_read
988+ post = Post . new
989+
990+ post . unknown_attribute = "assigned"
991+
992+ assert_respond_to post , :unknown_attribute
993+ assert_equal "assigned" , post . unknown_attribute
994+ end
995+
996+ def test_writing_nil_to_an_existing_attribute_can_be_read
997+ post = Post . new unknown_attribute : "assigned"
998+
999+ post . unknown_attribute = nil
1000+
1001+ assert_nil post . unknown_attribute
1002+ assert_respond_to post , :unknown_attribute
1003+ end
1004+
1005+ def test_predicate_for_an_unknown_attribute_returns_nil
1006+ post = Post . new
1007+
1008+ assert_not_predicate post , :unknown_attribute?
9641009 end
9651010
9661011 def test_custom_header
0 commit comments