@Test(expected = RequiredFieldException.class)
 public void create_id_inputParamValidation() {
   ProviderRestService tested = getTested();
   // case - invalid id parameter
   Map<String, Object> m = new HashMap<String, Object>();
   m.put(ProviderService.NAME, "myname");
   TestUtils.assertResponseStatus(tested.create(null, m), Status.BAD_REQUEST);
   TestUtils.assertResponseStatus(tested.create("", m), Status.BAD_REQUEST);
 }
 @Test(expected = RuntimeException.class)
 public void create_noid_exceptionFromService() {
   ProviderRestService tested = getTested();
   Mockito.reset(tested.providerService);
   Map<String, Object> m = new HashMap<String, Object>();
   m.put(ProviderService.NAME, "myname");
   Mockito.doThrow(new RuntimeException("my exception"))
       .when(tested.providerService)
       .create("myname", m);
   tested.create(m);
 }
  @SuppressWarnings("unchecked")
  @Test
  public void create_noid() {
    ProviderRestService tested = getTested();

    // case - invalid name field in input data
    {
      Map<String, Object> m = new HashMap<String, Object>();
      TestUtils.assertResponseStatus(tested.create(m), Status.BAD_REQUEST);
      m.put(ProviderService.NAME, "");
      TestUtils.assertResponseStatus(tested.create(m), Status.BAD_REQUEST);
    }

    // case - OK, no previously existing entity so new pwd hash used
    {
      Map<String, Object> m = new HashMap<String, Object>();
      m.put(ProviderService.NAME, "myname");
      m.put(ProviderService.PASSWORD_HASH, "pwhs");
      Mockito.when(tested.entityService.get("myname")).thenReturn(null);
      Map<String, Object> ret = (Map<String, Object>) tested.create(m);
      Assert.assertEquals("myname", ret.get("id"));
      Assert.assertEquals("pwhs", m.get(ProviderService.PASSWORD_HASH));
      Assert.assertEquals("myname", m.get(ProviderService.NAME));
      Mockito.verify(tested.providerService).create("myname", m);
      Mockito.verify(tested.providerService).get("myname");
      Mockito.verifyNoMoreInteractions(tested.entityService);
    }

    // case - OK, previously existing entity without pwd hash, so new pwd hash used
    {
      Mockito.reset(tested.providerService);
      Map<String, Object> m = new HashMap<String, Object>();
      m.put(ProviderService.NAME, "myname");
      m.put(ProviderService.PASSWORD_HASH, "pwhs");
      Mockito.when(tested.entityService.get("12")).thenReturn(new HashMap<String, Object>());
      Map<String, Object> ret = (Map<String, Object>) tested.create(m);
      Assert.assertEquals("myname", ret.get("id"));
      Assert.assertEquals("pwhs", m.get(ProviderService.PASSWORD_HASH));
      Assert.assertEquals("myname", m.get(ProviderService.NAME));
      Mockito.verify(tested.providerService).create("myname", m);
      Mockito.verify(tested.providerService).get("myname");
      Mockito.verifyNoMoreInteractions(tested.entityService);
    }

    // case - OK, previously existing entity with pwd hash, so old pwd hash preserved
    {
      Mockito.reset(tested.providerService);
      Map<String, Object> m = new HashMap<String, Object>();
      m.put(ProviderService.NAME, "myname");
      m.put(ProviderService.PASSWORD_HASH, "pwhs");
      Map<String, Object> entityOld = new HashMap<String, Object>();
      entityOld.put(ProviderService.PASSWORD_HASH, "pwhsold");
      entityOld.put(ProviderService.NAME, "myname");
      Mockito.when(tested.providerService.get("myname")).thenReturn(entityOld);
      Map<String, Object> ret = (Map<String, Object>) tested.create(m);
      Assert.assertEquals("myname", ret.get("id"));
      Assert.assertEquals("pwhsold", m.get(ProviderService.PASSWORD_HASH));
      Assert.assertEquals("myname", m.get(ProviderService.NAME));
      Mockito.verify(tested.providerService).create("myname", m);
      Mockito.verify(tested.providerService).get("myname");
      Mockito.verifyNoMoreInteractions(tested.entityService);
    }

    // case - OK, previously existing entity with pwd hash, so old pwd hash preserved. new entity
    // without pwd hash
    {
      Mockito.reset(tested.providerService);
      Map<String, Object> m = new HashMap<String, Object>();
      m.put(ProviderService.NAME, "myname");
      Map<String, Object> entityOld = new HashMap<String, Object>();
      entityOld.put(ProviderService.PASSWORD_HASH, "pwhsold");
      entityOld.put(ProviderService.NAME, "myname");
      Mockito.when(tested.providerService.get("myname")).thenReturn(entityOld);
      Map<String, Object> ret = (Map<String, Object>) tested.create(m);
      Assert.assertEquals("myname", ret.get("id"));
      Assert.assertEquals("pwhsold", m.get(ProviderService.PASSWORD_HASH));
      Assert.assertEquals("myname", m.get(ProviderService.NAME));
      Mockito.verify(tested.providerService).create("myname", m);
      Mockito.verify(tested.providerService).get("myname");
      Mockito.verifyNoMoreInteractions(tested.providerService);
    }
  }