@Test public void testMergeDemergeWithNullAsPassword() { MockPasswordEncoder pwd = new MockPasswordEncoder(); String merged = pwd.nowMergePasswordAndSalt(null, "foo", true); assertThat(merged).isEqualTo("{foo}"); String[] demerged = pwd.nowDemergePasswordAndSalt(merged); assertThat(demerged[0]).isEqualTo(""); assertThat(demerged[1]).isEqualTo("foo"); }
@Test public void testDemergeWithNullIsRejected() { MockPasswordEncoder pwd = new MockPasswordEncoder(); try { pwd.nowDemergePasswordAndSalt(null); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException expected) { assertThat(expected.getMessage()).isEqualTo("Cannot pass a null or empty String"); } }
@Test public void testStrictMergeRejectsDelimitersInSalt2() { MockPasswordEncoder pwd = new MockPasswordEncoder(); try { pwd.nowMergePasswordAndSalt("password", "f}oo", true); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException expected) { assertThat(expected.getMessage()).isEqualTo("Cannot use { or } in salt.toString()"); } }
@Test public void testMergeDemergeWithDelimitersInPassword() { MockPasswordEncoder pwd = new MockPasswordEncoder(); String merged = pwd.nowMergePasswordAndSalt("p{ass{w{o}rd", "foo", true); assertThat(merged).isEqualTo("p{ass{w{o}rd{foo}"); String[] demerged = pwd.nowDemergePasswordAndSalt(merged); assertThat(demerged[0]).isEqualTo("p{ass{w{o}rd"); assertThat(demerged[1]).isEqualTo("foo"); }
@Test public void testDemergeHandlesEmptyAndNullSalts() { MockPasswordEncoder pwd = new MockPasswordEncoder(); String merged = pwd.nowMergePasswordAndSalt("password", null, true); String[] demerged = pwd.nowDemergePasswordAndSalt(merged); assertThat(demerged[0]).isEqualTo("password"); assertThat(demerged[1]).isEqualTo(""); merged = pwd.nowMergePasswordAndSalt("password", "", true); demerged = pwd.nowDemergePasswordAndSalt(merged); assertThat(demerged[0]).isEqualTo("password"); assertThat(demerged[1]).isEqualTo(""); }