package de.stadtbote.votian; import de.stadtbote.votian.database.DatabaseService; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; import static org.mockito.ArgumentMatchers.*; import static de.stadtbote.votian.AddressAdministration.*; public class AddressIntegrationAssertions { public static void verify(DatabaseService db){ var json=new ObjectMapper();var user=AppointmentServiceTest.user(2);var service=new AddressAdministration(db,json,new OrderEntryCatalog(db)); var query=new Query("","","","","","","",null,"street",0); var save=new Save(UUID.randomUUID().toString(),"10000","Musterstraße","20095","Hamburg","DE","1","20",1); assertThat(service.create(user,Kind.POSTAL,save)).containsEntry("state","DONE");assertThat(service.create(user,Kind.POSTAL,save)).containsEntry("state","DONE");assertThat(db.queryForObject("SELECT COUNT(*) FROM serviceplzaddress",Integer.class)).isEqualTo(1); assertThat(service.query(user,Kind.POSTAL,query)).containsEntry("total",1L); var row=db.queryForList(service.select(Kind.POSTAL),7).getFirst();assertThat(row).containsEntry("target","10000").containsEntry("street","Musterstraße"); assertThatThrownBy(()->service.remove(user,Kind.POSTAL,new Delete(UUID.randomUUID().toString(),List.of(new Selection(LegacyMapping.id(row,"id"),"stale"))))).hasMessageContaining("409"); var wrong=new LegacyUser(user.userId(),user.employeeId(),8,user.username(),user.rights());assertThat(service.query(wrong,Kind.POSTAL,query)).containsEntry("total",0L);assertThatThrownBy(()->service.remove(wrong,Kind.POSTAL,new Delete(UUID.randomUUID().toString(),List.of(new Selection(LegacyMapping.id(row,"id"),AdminSupport.revision(row)))))).hasMessageContaining("404"); var failing=spy(db);doThrow(new org.springframework.dao.DataAccessResourceFailureException("commit status unavailable")).when(failing).update(startsWith("UPDATE genericdatacontainer SET gdc_context='DONE'"),any(Object[].class));var interrupted=new AddressAdministration(failing,json,new OrderEntryCatalog(failing)); var area=new Save(UUID.randomUUID().toString(),"42","Neue Straße","20095","Hamburg","DE","","",2); assertThat(interrupted.create(user,Kind.AREA,area)).containsEntry("state","PENDING");assertThat(db.queryForObject("SELECT COUNT(*) FROM address WHERE ad_street='Neue Straße'",Integer.class)).isEqualTo(1);assertThat(db.queryForObject("SELECT COUNT(*) FROM serviceplzareaaddress",Integer.class)).isEqualTo(1); assertThat(service.resume(user,Kind.AREA,area.requestId())).containsEntry("state","DONE");assertThat(service.create(user,Kind.AREA,area)).containsEntry("state","DONE");assertThat(db.queryForObject("SELECT COUNT(*) FROM serviceplzareaaddress",Integer.class)).isEqualTo(1); var first=db.queryForList(service.select(Kind.AREA),7).getFirst();assertThat(first).containsEntry("target","0042");assertThat(service.exceptions(user,LegacyMapping.id(first,"id"))).containsExactly(Map.of("house","1a","area","0043")); var remove=new Delete(UUID.randomUUID().toString(),List.of(new Selection(LegacyMapping.id(first,"id"),AdminSupport.revision(first))));assertThat(interrupted.remove(user,Kind.AREA,remove)).containsEntry("state","PENDING");assertThat(service.resume(user,Kind.AREA,remove.requestId())).containsEntry("state","DONE");assertThat(db.queryForObject("SELECT COUNT(*) FROM serviceplzareaaddress",Integer.class)).isZero();assertThat(db.queryForObject("SELECT COUNT(*) FROM address WHERE ad_street='Neue Straße'",Integer.class)).isEqualTo(1); assertThat(service.query(user,Kind.POSTAL,new Query("NOPE","","","","","","",null,"street",0))).containsEntry("total",0L); } }