OSDN Git Service

ActiveLdap 1.2.4
[redminele/redminele.git] / ruby / lib / ruby / gems / 1.8 / gems / activeldap-1.2.4 / test / test_load.rb
diff --git a/ruby/lib/ruby/gems/1.8/gems/activeldap-1.2.4/test/test_load.rb b/ruby/lib/ruby/gems/1.8/gems/activeldap-1.2.4/test/test_load.rb
new file mode 100644 (file)
index 0000000..8eacb2f
--- /dev/null
@@ -0,0 +1,134 @@
+require 'al-test-utils'
+
+class TestLoad < Test::Unit::TestCase
+  include AlTestUtils
+
+  priority :must
+  def test_load_modify_record
+    ldif = ActiveLdap::LDIF.new
+    make_temporary_user do |user, password|
+      user.display_name = "Display Name"
+      assert(user.save)
+
+      user = @user_class.find(user.dn)
+      assert_equal("Display Name", user.display_name)
+
+      record = ActiveLdap::LDIF::ModifyRecord.new(user.dn)
+      ldif << record
+
+      original_home_directory = user.home_directory
+      new_home_directory = "#{original_home_directory}-new"
+      record.add_operation(:delete, "homeDirectory", [], {})
+      record.add_operation(:add, "homeDirectory", [],
+                           {"homeDirectory" => [new_home_directory]})
+
+      original_descriptions = user.description(true)
+      new_description = "new description"
+      record.add_operation(:add, "description", [],
+                           {"description" => [new_description]})
+
+      record.add_operation(:delete, "DisplayName", [], {})
+
+      original_sn = user.sn
+      new_sn = ["New SN1", "New SN2"]
+      record.add_operation(:replace, "sn", [], {"sn" => new_sn})
+
+      ActiveLdap::Base.load(ldif.to_s)
+
+      user = @user_class.find(user.dn)
+      assert_equal(new_home_directory, user.home_directory)
+      assert_equal(original_descriptions + [new_description],
+                   user.description(true))
+      assert_nil(user.display_name)
+      assert_equal(new_sn, user.sn)
+    end
+  end
+
+  def test_load_move_dn_record
+    assert_load_move_dn_record(ActiveLdap::LDIF::ModifyDNRecord)
+    assert_load_move_dn_record(ActiveLdap::LDIF::ModifyRDNRecord)
+  end
+
+  def test_load_copy_dn_record
+    assert_load_copy_dn_record(ActiveLdap::LDIF::ModifyDNRecord)
+    assert_load_copy_dn_record(ActiveLdap::LDIF::ModifyRDNRecord)
+  end
+
+  def test_load_delete_record
+    ldif = ActiveLdap::LDIF.new
+    make_temporary_user do |user, password|
+      record = ActiveLdap::LDIF::DeleteRecord.new(user.dn)
+      ldif << record
+      assert_true(@user_class.exists?(user.dn))
+      ActiveLdap::Base.load(ldif.to_s)
+      assert_false(@user_class.exists?(user.dn))
+    end
+  end
+
+  def test_load_add_record
+    ldif = ActiveLdap::LDIF.new
+    make_temporary_user do |user, password|
+      new_description = "new description"
+      attributes = {
+        "description" => [new_description]
+      }
+      original_descriptions = user.description(true)
+      record = ActiveLdap::LDIF::AddRecord.new(user.dn, [], attributes)
+      ldif << record
+      ActiveLdap::Base.load(ldif.to_s)
+      user.reload
+      assert_equal(original_descriptions + [new_description],
+                   user.description(true))
+    end
+  end
+
+  def test_load_content_records
+    ldif = ActiveLdap::LDIF.new
+    2.times do
+      make_temporary_user do |user, password|
+        ldif << ActiveLdap::LDIF.parse(user.to_ldif).records[0]
+      end
+    end
+
+    original_n_users = @user_class.count
+    ActiveLdap::Base.load(ldif.to_s)
+    assert_equal(2, @user_class.count - original_n_users)
+  end
+
+  priority :normal
+
+  private
+  def assert_load_copy_dn_record(record_class)
+    ldif = ActiveLdap::LDIF.new
+    make_temporary_user do |user, password|
+      new_rdn = "uid=XXX"
+      ensure_delete_user(new_rdn) do
+        record = record_class.new(user.dn, [], new_rdn, false)
+        ldif << record
+        assert_true(@user_class.exists?(user.dn))
+        assert_false(@user_class.exists?(new_rdn))
+        ActiveLdap::Base.load(ldif.to_s)
+        assert_true(@user_class.exists?(user.dn))
+        assert_true(@user_class.exists?(new_rdn))
+        assert_equal(user.cn, @user_class.find(new_rdn).cn)
+      end
+    end
+  end
+
+  def assert_load_move_dn_record(record_class)
+    ldif = ActiveLdap::LDIF.new
+    make_temporary_user do |user, password|
+      new_rdn = "uid=XXX"
+      ensure_delete_user(new_rdn) do
+        record = record_class.new(user.dn, [], new_rdn, true)
+        ldif << record
+        assert_true(@user_class.exists?(user.dn))
+        assert_false(@user_class.exists?(new_rdn))
+        ActiveLdap::Base.load(ldif.to_s)
+        assert_false(@user_class.exists?(user.dn))
+        assert_true(@user_class.exists?(new_rdn))
+        assert_equal(user.cn, @user_class.find(new_rdn).cn)
+      end
+    end
+  end
+end