From 12a18b9d5f0f244fe8ec4e88e7f0ae3177842955 Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Mon, 1 Apr 2019 17:58:19 +0200 Subject: [PATCH 1/5] remove accidental file 'x' --- x | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 x diff --git a/x b/x deleted file mode 100644 index f96ebedb..00000000 --- a/x +++ /dev/null @@ -1,2 +0,0 @@ -export PATH=/home/mi/Programs/java/jdk1.8/bin:/home/mi/Programs/maven/apache-maven-3.5.3/bin:/home/mi/Programs/gradle/gradle-3.5/bin:/home/mi/Programs/Android/Sdk/platform-tools:/home/mi/.sdkman/candidates/kotlin/current/bin:/home/mi/Programs/java/jdk1.8/bin:/home/mi/Programs/maven/apache-maven-3.5.3/bin:/home/mi/Programs/gradle/gradle-3.5/bin:/home/mi/Programs/Android/Sdk/platform-tools:/home/mi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/mi/.npm-global/bin:/home/mi/npm/bin:/home/mi/.npm-global/bin:/home/mi/npm/bin - From 79f59fb3230b277cbb50aea6a6a4499420b3fb9d Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Tue, 2 Apr 2019 11:07:19 +0200 Subject: [PATCH 2/5] initial customer.jdl --- src/main/jdl/customer.jdl | 66 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/main/jdl/customer.jdl diff --git a/src/main/jdl/customer.jdl b/src/main/jdl/customer.jdl new file mode 100644 index 00000000..0681c42d --- /dev/null +++ b/src/main/jdl/customer.jdl @@ -0,0 +1,66 @@ + +entity Customer { + number Integer required unique min(10000) max(99999), + prefix String required unique pattern(/[a-z][a-z0-9]+/), +} + +entity Contact { + firstName String required maxlength(80), + lastName String required maxlength(80), + email String required maxlength(80) +} + +enum CustomerContactRole { + CONTRACTUAL, + TECHNICAL, + FINANCIAL +} + +entity CustomerContact { + role CustomerContactRole required +} + +entity Membership { + sinceDate LocalDate required, + untilDate LocalDate +} + +enum ShareAction { + SUBSCRIPTION, + CANCELLATION +} + +entity Share { + date LocalDate required, + action ShareAction required, + quantity Integer required, + comment String maxlength(160) +} + +enum AssetAction { + PAYMENT, + HANDOVER, + ADOPTION, + LOSS, + CLEARING, + PAYBACK +} + +entity Asset { + date LocalDate required, + action AssetAction required, + amount BigDecimal required, + comment String maxlength(160) +} + +relationship OneToMany { + Customer to Membership{customer(prefix)}, + Membership to Share{member}, + Membership to Asset{member} +} + +relationship ManyToOne { + CustomerContact{contact(email) required} to Contact{role}, + CustomerContact{customer(prefix) required} to Customer{role} +} + From 539e3c48fd1aee053fafaf565dc4648bbe3db58f Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Tue, 2 Apr 2019 15:33:20 +0200 Subject: [PATCH 3/5] sortable Customer+Contact --- src/main/jdl/customer.jdl | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/jdl/customer.jdl b/src/main/jdl/customer.jdl index 0681c42d..9e023aeb 100644 --- a/src/main/jdl/customer.jdl +++ b/src/main/jdl/customer.jdl @@ -4,12 +4,22 @@ entity Customer { prefix String required unique pattern(/[a-z][a-z0-9]+/), } +filter Customer +paginate Customer with infinite-scroll +service Customer with serviceClass +dto Customer with mapstruct + entity Contact { firstName String required maxlength(80), lastName String required maxlength(80), email String required maxlength(80) } +filter Contact +paginate Contact with infinite-scroll +service Contact with serviceClass +dto Contact with mapstruct + enum CustomerContactRole { CONTRACTUAL, TECHNICAL, @@ -20,11 +30,17 @@ entity CustomerContact { role CustomerContactRole required } +service CustomerContact with serviceClass +dto CustomerContact with mapstruct + entity Membership { sinceDate LocalDate required, untilDate LocalDate } +service Membership with serviceClass +dto Membership with mapstruct + enum ShareAction { SUBSCRIPTION, CANCELLATION From acd28d679ccc0b6f19ff94b92498933fe1d75805 Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Tue, 2 Apr 2019 16:15:46 +0200 Subject: [PATCH 4/5] service/dto/filter for all entities --- src/main/jdl/customer.jdl | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/main/jdl/customer.jdl b/src/main/jdl/customer.jdl index 9e023aeb..707076ea 100644 --- a/src/main/jdl/customer.jdl +++ b/src/main/jdl/customer.jdl @@ -1,24 +1,19 @@ +filter all +dto all with mapstruct +service all with serviceClass +paginate all with infinite-scroll entity Customer { number Integer required unique min(10000) max(99999), prefix String required unique pattern(/[a-z][a-z0-9]+/), } -filter Customer -paginate Customer with infinite-scroll -service Customer with serviceClass -dto Customer with mapstruct - entity Contact { firstName String required maxlength(80), lastName String required maxlength(80), email String required maxlength(80) } -filter Contact -paginate Contact with infinite-scroll -service Contact with serviceClass -dto Contact with mapstruct enum CustomerContactRole { CONTRACTUAL, @@ -30,17 +25,11 @@ entity CustomerContact { role CustomerContactRole required } -service CustomerContact with serviceClass -dto CustomerContact with mapstruct - entity Membership { sinceDate LocalDate required, untilDate LocalDate } -service Membership with serviceClass -dto Membership with mapstruct - enum ShareAction { SUBSCRIPTION, CANCELLATION From 1e7b801e22487f59471821bd3fddfbfc5ebe608f Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Wed, 3 Apr 2019 10:56:31 +0200 Subject: [PATCH 5/5] import of initial customer.jdl including related entities --- .jhipster/Asset.json | 53 ++ .jhipster/Contact.json | 49 ++ .jhipster/Customer.json | 50 ++ .jhipster/CustomerContact.json | 40 ++ .jhipster/Membership.json | 46 ++ .jhipster/Share.json | 53 ++ .../hostsharing/hsadminng/domain/Asset.java | 156 +++++ .../hostsharing/hsadminng/domain/Contact.java | 148 ++++ .../hsadminng/domain/Customer.java | 157 +++++ .../hsadminng/domain/CustomerContact.java | 119 ++++ .../hsadminng/domain/Membership.java | 172 +++++ .../hostsharing/hsadminng/domain/Share.java | 155 +++++ .../domain/enumeration/AssetAction.java | 8 + .../enumeration/CustomerContactRole.java | 8 + .../domain/enumeration/ShareAction.java | 8 + .../hsadminng/repository/AssetRepository.java | 15 + .../repository/ContactRepository.java | 15 + .../repository/CustomerContactRepository.java | 15 + .../repository/CustomerRepository.java | 15 + .../repository/MembershipRepository.java | 15 + .../hsadminng/repository/ShareRepository.java | 15 + .../hsadminng/service/AssetQueryService.java | 111 +++ .../hsadminng/service/AssetService.java | 84 +++ .../service/ContactQueryService.java | 108 +++ .../hsadminng/service/ContactService.java | 84 +++ .../service/CustomerContactQueryService.java | 106 +++ .../service/CustomerContactService.java | 84 +++ .../service/CustomerQueryService.java | 109 +++ .../hsadminng/service/CustomerService.java | 84 +++ .../service/MembershipQueryService.java | 113 +++ .../hsadminng/service/MembershipService.java | 84 +++ .../hsadminng/service/ShareQueryService.java | 111 +++ .../hsadminng/service/ShareService.java | 84 +++ .../hsadminng/service/dto/AssetCriteria.java | 136 ++++ .../hsadminng/service/dto/AssetDTO.java | 111 +++ .../service/dto/ContactCriteria.java | 115 ++++ .../hsadminng/service/dto/ContactDTO.java | 88 +++ .../service/dto/CustomerContactCriteria.java | 108 +++ .../service/dto/CustomerContactDTO.java | 106 +++ .../service/dto/CustomerCriteria.java | 115 ++++ .../hsadminng/service/dto/CustomerDTO.java | 76 +++ .../service/dto/MembershipCriteria.java | 129 ++++ .../hsadminng/service/dto/MembershipDTO.java | 95 +++ .../hsadminng/service/dto/ShareCriteria.java | 135 ++++ .../hsadminng/service/dto/ShareDTO.java | 110 +++ .../hsadminng/service/mapper/AssetMapper.java | 28 + .../service/mapper/ContactMapper.java | 26 + .../service/mapper/CustomerContactMapper.java | 32 + .../service/mapper/CustomerMapper.java | 27 + .../service/mapper/EntityMapper.java | 21 + .../service/mapper/MembershipMapper.java | 31 + .../hsadminng/service/mapper/ShareMapper.java | 28 + .../hsadminng/web/rest/AssetResource.java | 138 ++++ .../hsadminng/web/rest/ContactResource.java | 138 ++++ .../web/rest/CustomerContactResource.java | 138 ++++ .../hsadminng/web/rest/CustomerResource.java | 138 ++++ .../web/rest/MembershipResource.java | 138 ++++ .../hsadminng/web/rest/ShareResource.java | 138 ++++ .../20190403083735_added_entity_Customer.xml | 37 + .../20190403083736_added_entity_Contact.xml | 41 ++ ...403083737_added_entity_CustomerContact.xml | 41 ++ ...ded_entity_constraints_CustomerContact.xml | 24 + ...20190403083738_added_entity_Membership.xml | 41 ++ ...38_added_entity_constraints_Membership.xml | 18 + .../20190403083739_added_entity_Share.xml | 49 ++ ...3083739_added_entity_constraints_Share.xml | 18 + .../20190403083740_added_entity_Asset.xml | 49 ++ ...3083740_added_entity_constraints_Asset.xml | 18 + .../resources/config/liquibase/master.xml | 10 + .../asset/asset-delete-dialog.component.html | 19 + .../asset/asset-delete-dialog.component.ts | 65 ++ .../asset/asset-detail.component.html | 45 ++ .../entities/asset/asset-detail.component.ts | 24 + .../asset/asset-update.component.html | 90 +++ .../entities/asset/asset-update.component.ts | 78 +++ .../app/entities/asset/asset.component.html | 66 ++ .../app/entities/asset/asset.component.ts | 108 +++ .../webapp/app/entities/asset/asset.module.ts | 34 + .../webapp/app/entities/asset/asset.route.ts | 93 +++ .../app/entities/asset/asset.service.ts | 74 ++ src/main/webapp/app/entities/asset/index.ts | 6 + .../contact-delete-dialog.component.html | 19 + .../contact-delete-dialog.component.ts | 65 ++ .../contact/contact-detail.component.html | 35 + .../contact/contact-detail.component.ts | 24 + .../contact/contact-update.component.html | 69 ++ .../contact/contact-update.component.ts | 51 ++ .../entities/contact/contact.component.html | 58 ++ .../app/entities/contact/contact.component.ts | 108 +++ .../app/entities/contact/contact.module.ts | 40 ++ .../app/entities/contact/contact.route.ts | 93 +++ .../app/entities/contact/contact.service.ts | 38 ++ src/main/webapp/app/entities/contact/index.ts | 6 + ...tomer-contact-delete-dialog.component.html | 19 + ...ustomer-contact-delete-dialog.component.ts | 72 ++ .../customer-contact-detail.component.html | 39 ++ .../customer-contact-detail.component.ts | 24 + .../customer-contact-update.component.html | 64 ++ .../customer-contact-update.component.ts | 92 +++ .../customer-contact.component.html | 66 ++ .../customer-contact.component.ts | 108 +++ .../customer-contact.module.ts | 45 ++ .../customer-contact.route.ts | 93 +++ .../customer-contact.service.ts | 38 ++ .../app/entities/customer-contact/index.ts | 6 + .../customer-delete-dialog.component.html | 19 + .../customer-delete-dialog.component.ts | 65 ++ .../customer/customer-detail.component.html | 31 + .../customer/customer-detail.component.ts | 24 + .../customer/customer-update.component.html | 62 ++ .../customer/customer-update.component.ts | 51 ++ .../entities/customer/customer.component.html | 56 ++ .../entities/customer/customer.component.ts | 108 +++ .../app/entities/customer/customer.module.ts | 40 ++ .../app/entities/customer/customer.route.ts | 93 +++ .../app/entities/customer/customer.service.ts | 38 ++ .../webapp/app/entities/customer/index.ts | 6 + src/main/webapp/app/entities/entity.module.ts | 24 + .../webapp/app/entities/membership/index.ts | 6 + .../membership-delete-dialog.component.html | 19 + .../membership-delete-dialog.component.ts | 69 ++ .../membership-detail.component.html | 37 + .../membership/membership-detail.component.ts | 24 + .../membership-update.component.html | 57 ++ .../membership/membership-update.component.ts | 79 +++ .../membership/membership.component.html | 62 ++ .../membership/membership.component.ts | 108 +++ .../entities/membership/membership.module.ts | 40 ++ .../entities/membership/membership.route.ts | 93 +++ .../entities/membership/membership.service.ts | 77 +++ src/main/webapp/app/entities/share/index.ts | 6 + .../share/share-delete-dialog.component.html | 19 + .../share/share-delete-dialog.component.ts | 65 ++ .../share/share-detail.component.html | 45 ++ .../entities/share/share-detail.component.ts | 24 + .../share/share-update.component.html | 86 +++ .../entities/share/share-update.component.ts | 78 +++ .../app/entities/share/share.component.html | 66 ++ .../app/entities/share/share.component.ts | 108 +++ .../webapp/app/entities/share/share.module.ts | 34 + .../webapp/app/entities/share/share.route.ts | 93 +++ .../app/entities/share/share.service.ts | 74 ++ .../app/layouts/navbar/navbar.component.html | 36 + .../webapp/app/shared/model/asset.model.ts | 30 + .../webapp/app/shared/model/contact.model.ts | 19 + .../shared/model/customer-contact.model.ts | 25 + .../webapp/app/shared/model/customer.model.ts | 20 + .../app/shared/model/membership.model.ts | 25 + .../webapp/app/shared/model/share.model.ts | 26 + src/main/webapp/i18n/de/asset.json | 25 + src/main/webapp/i18n/de/assetAction.json | 13 + src/main/webapp/i18n/de/contact.json | 24 + src/main/webapp/i18n/de/customer.json | 24 + src/main/webapp/i18n/de/customerContact.json | 23 + .../webapp/i18n/de/customerContactRole.json | 10 + src/main/webapp/i18n/de/global.json | 6 + src/main/webapp/i18n/de/membership.json | 25 + src/main/webapp/i18n/de/share.json | 25 + src/main/webapp/i18n/de/shareAction.json | 9 + src/main/webapp/i18n/en/asset.json | 25 + src/main/webapp/i18n/en/assetAction.json | 13 + src/main/webapp/i18n/en/contact.json | 24 + src/main/webapp/i18n/en/customer.json | 24 + src/main/webapp/i18n/en/customerContact.json | 23 + .../webapp/i18n/en/customerContactRole.json | 10 + src/main/webapp/i18n/en/global.json | 6 + src/main/webapp/i18n/en/membership.json | 25 + src/main/webapp/i18n/en/share.json | 25 + src/main/webapp/i18n/en/shareAction.json | 9 + .../web/rest/AssetResourceIntTest.java | 616 +++++++++++++++++ .../web/rest/ContactResourceIntTest.java | 536 +++++++++++++++ .../rest/CustomerContactResourceIntTest.java | 431 ++++++++++++ .../web/rest/CustomerResourceIntTest.java | 515 ++++++++++++++ .../web/rest/MembershipResourceIntTest.java | 545 +++++++++++++++ .../web/rest/ShareResourceIntTest.java | 642 ++++++++++++++++++ .../asset-delete-dialog.component.spec.ts | 52 ++ .../asset/asset-detail.component.spec.ts | 40 ++ .../asset/asset-update.component.spec.ts | 60 ++ .../entities/asset/asset.component.spec.ts | 128 ++++ .../app/entities/asset/asset.service.spec.ts | 135 ++++ .../contact-delete-dialog.component.spec.ts | 52 ++ .../contact/contact-detail.component.spec.ts | 40 ++ .../contact/contact-update.component.spec.ts | 60 ++ .../contact/contact.component.spec.ts | 128 ++++ .../entities/contact/contact.service.spec.ts | 108 +++ ...er-contact-delete-dialog.component.spec.ts | 52 ++ .../customer-contact-detail.component.spec.ts | 40 ++ .../customer-contact-update.component.spec.ts | 60 ++ .../customer-contact.component.spec.ts | 128 ++++ .../customer-contact.service.spec.ts | 104 +++ .../customer-delete-dialog.component.spec.ts | 52 ++ .../customer-detail.component.spec.ts | 40 ++ .../customer-update.component.spec.ts | 60 ++ .../customer/customer.component.spec.ts | 128 ++++ .../customer/customer.service.spec.ts | 106 +++ ...membership-delete-dialog.component.spec.ts | 52 ++ .../membership-detail.component.spec.ts | 40 ++ .../membership-update.component.spec.ts | 60 ++ .../membership/membership.component.spec.ts | 128 ++++ .../membership/membership.service.spec.ts | 136 ++++ .../share-delete-dialog.component.spec.ts | 52 ++ .../share/share-detail.component.spec.ts | 40 ++ .../share/share-update.component.spec.ts | 60 ++ .../entities/share/share.component.spec.ts | 128 ++++ .../app/entities/share/share.service.spec.ts | 135 ++++ 205 files changed, 15363 insertions(+) create mode 100644 .jhipster/Asset.json create mode 100644 .jhipster/Contact.json create mode 100644 .jhipster/Customer.json create mode 100644 .jhipster/CustomerContact.json create mode 100644 .jhipster/Membership.json create mode 100644 .jhipster/Share.json create mode 100644 src/main/java/org/hostsharing/hsadminng/domain/Asset.java create mode 100644 src/main/java/org/hostsharing/hsadminng/domain/Contact.java create mode 100644 src/main/java/org/hostsharing/hsadminng/domain/Customer.java create mode 100644 src/main/java/org/hostsharing/hsadminng/domain/CustomerContact.java create mode 100644 src/main/java/org/hostsharing/hsadminng/domain/Membership.java create mode 100644 src/main/java/org/hostsharing/hsadminng/domain/Share.java create mode 100644 src/main/java/org/hostsharing/hsadminng/domain/enumeration/AssetAction.java create mode 100644 src/main/java/org/hostsharing/hsadminng/domain/enumeration/CustomerContactRole.java create mode 100644 src/main/java/org/hostsharing/hsadminng/domain/enumeration/ShareAction.java create mode 100644 src/main/java/org/hostsharing/hsadminng/repository/AssetRepository.java create mode 100644 src/main/java/org/hostsharing/hsadminng/repository/ContactRepository.java create mode 100644 src/main/java/org/hostsharing/hsadminng/repository/CustomerContactRepository.java create mode 100644 src/main/java/org/hostsharing/hsadminng/repository/CustomerRepository.java create mode 100644 src/main/java/org/hostsharing/hsadminng/repository/MembershipRepository.java create mode 100644 src/main/java/org/hostsharing/hsadminng/repository/ShareRepository.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/AssetQueryService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/AssetService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/ContactQueryService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/ContactService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/CustomerContactQueryService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/CustomerContactService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/CustomerQueryService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/CustomerService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/MembershipQueryService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/MembershipService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/ShareQueryService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/ShareService.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/AssetCriteria.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/AssetDTO.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/ContactCriteria.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/ContactDTO.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/CustomerContactCriteria.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/CustomerContactDTO.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/CustomerCriteria.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/CustomerDTO.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/MembershipCriteria.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/MembershipDTO.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/ShareCriteria.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/dto/ShareDTO.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/mapper/AssetMapper.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/mapper/ContactMapper.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/mapper/CustomerContactMapper.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/mapper/CustomerMapper.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/mapper/EntityMapper.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/mapper/MembershipMapper.java create mode 100644 src/main/java/org/hostsharing/hsadminng/service/mapper/ShareMapper.java create mode 100644 src/main/java/org/hostsharing/hsadminng/web/rest/AssetResource.java create mode 100644 src/main/java/org/hostsharing/hsadminng/web/rest/ContactResource.java create mode 100644 src/main/java/org/hostsharing/hsadminng/web/rest/CustomerContactResource.java create mode 100644 src/main/java/org/hostsharing/hsadminng/web/rest/CustomerResource.java create mode 100644 src/main/java/org/hostsharing/hsadminng/web/rest/MembershipResource.java create mode 100644 src/main/java/org/hostsharing/hsadminng/web/rest/ShareResource.java create mode 100644 src/main/resources/config/liquibase/changelog/20190403083735_added_entity_Customer.xml create mode 100644 src/main/resources/config/liquibase/changelog/20190403083736_added_entity_Contact.xml create mode 100644 src/main/resources/config/liquibase/changelog/20190403083737_added_entity_CustomerContact.xml create mode 100644 src/main/resources/config/liquibase/changelog/20190403083737_added_entity_constraints_CustomerContact.xml create mode 100644 src/main/resources/config/liquibase/changelog/20190403083738_added_entity_Membership.xml create mode 100644 src/main/resources/config/liquibase/changelog/20190403083738_added_entity_constraints_Membership.xml create mode 100644 src/main/resources/config/liquibase/changelog/20190403083739_added_entity_Share.xml create mode 100644 src/main/resources/config/liquibase/changelog/20190403083739_added_entity_constraints_Share.xml create mode 100644 src/main/resources/config/liquibase/changelog/20190403083740_added_entity_Asset.xml create mode 100644 src/main/resources/config/liquibase/changelog/20190403083740_added_entity_constraints_Asset.xml create mode 100644 src/main/webapp/app/entities/asset/asset-delete-dialog.component.html create mode 100644 src/main/webapp/app/entities/asset/asset-delete-dialog.component.ts create mode 100644 src/main/webapp/app/entities/asset/asset-detail.component.html create mode 100644 src/main/webapp/app/entities/asset/asset-detail.component.ts create mode 100644 src/main/webapp/app/entities/asset/asset-update.component.html create mode 100644 src/main/webapp/app/entities/asset/asset-update.component.ts create mode 100644 src/main/webapp/app/entities/asset/asset.component.html create mode 100644 src/main/webapp/app/entities/asset/asset.component.ts create mode 100644 src/main/webapp/app/entities/asset/asset.module.ts create mode 100644 src/main/webapp/app/entities/asset/asset.route.ts create mode 100644 src/main/webapp/app/entities/asset/asset.service.ts create mode 100644 src/main/webapp/app/entities/asset/index.ts create mode 100644 src/main/webapp/app/entities/contact/contact-delete-dialog.component.html create mode 100644 src/main/webapp/app/entities/contact/contact-delete-dialog.component.ts create mode 100644 src/main/webapp/app/entities/contact/contact-detail.component.html create mode 100644 src/main/webapp/app/entities/contact/contact-detail.component.ts create mode 100644 src/main/webapp/app/entities/contact/contact-update.component.html create mode 100644 src/main/webapp/app/entities/contact/contact-update.component.ts create mode 100644 src/main/webapp/app/entities/contact/contact.component.html create mode 100644 src/main/webapp/app/entities/contact/contact.component.ts create mode 100644 src/main/webapp/app/entities/contact/contact.module.ts create mode 100644 src/main/webapp/app/entities/contact/contact.route.ts create mode 100644 src/main/webapp/app/entities/contact/contact.service.ts create mode 100644 src/main/webapp/app/entities/contact/index.ts create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact-delete-dialog.component.html create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact-delete-dialog.component.ts create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact-detail.component.html create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact-detail.component.ts create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact-update.component.html create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact-update.component.ts create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact.component.html create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact.component.ts create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact.module.ts create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact.route.ts create mode 100644 src/main/webapp/app/entities/customer-contact/customer-contact.service.ts create mode 100644 src/main/webapp/app/entities/customer-contact/index.ts create mode 100644 src/main/webapp/app/entities/customer/customer-delete-dialog.component.html create mode 100644 src/main/webapp/app/entities/customer/customer-delete-dialog.component.ts create mode 100644 src/main/webapp/app/entities/customer/customer-detail.component.html create mode 100644 src/main/webapp/app/entities/customer/customer-detail.component.ts create mode 100644 src/main/webapp/app/entities/customer/customer-update.component.html create mode 100644 src/main/webapp/app/entities/customer/customer-update.component.ts create mode 100644 src/main/webapp/app/entities/customer/customer.component.html create mode 100644 src/main/webapp/app/entities/customer/customer.component.ts create mode 100644 src/main/webapp/app/entities/customer/customer.module.ts create mode 100644 src/main/webapp/app/entities/customer/customer.route.ts create mode 100644 src/main/webapp/app/entities/customer/customer.service.ts create mode 100644 src/main/webapp/app/entities/customer/index.ts create mode 100644 src/main/webapp/app/entities/membership/index.ts create mode 100644 src/main/webapp/app/entities/membership/membership-delete-dialog.component.html create mode 100644 src/main/webapp/app/entities/membership/membership-delete-dialog.component.ts create mode 100644 src/main/webapp/app/entities/membership/membership-detail.component.html create mode 100644 src/main/webapp/app/entities/membership/membership-detail.component.ts create mode 100644 src/main/webapp/app/entities/membership/membership-update.component.html create mode 100644 src/main/webapp/app/entities/membership/membership-update.component.ts create mode 100644 src/main/webapp/app/entities/membership/membership.component.html create mode 100644 src/main/webapp/app/entities/membership/membership.component.ts create mode 100644 src/main/webapp/app/entities/membership/membership.module.ts create mode 100644 src/main/webapp/app/entities/membership/membership.route.ts create mode 100644 src/main/webapp/app/entities/membership/membership.service.ts create mode 100644 src/main/webapp/app/entities/share/index.ts create mode 100644 src/main/webapp/app/entities/share/share-delete-dialog.component.html create mode 100644 src/main/webapp/app/entities/share/share-delete-dialog.component.ts create mode 100644 src/main/webapp/app/entities/share/share-detail.component.html create mode 100644 src/main/webapp/app/entities/share/share-detail.component.ts create mode 100644 src/main/webapp/app/entities/share/share-update.component.html create mode 100644 src/main/webapp/app/entities/share/share-update.component.ts create mode 100644 src/main/webapp/app/entities/share/share.component.html create mode 100644 src/main/webapp/app/entities/share/share.component.ts create mode 100644 src/main/webapp/app/entities/share/share.module.ts create mode 100644 src/main/webapp/app/entities/share/share.route.ts create mode 100644 src/main/webapp/app/entities/share/share.service.ts create mode 100644 src/main/webapp/app/shared/model/asset.model.ts create mode 100644 src/main/webapp/app/shared/model/contact.model.ts create mode 100644 src/main/webapp/app/shared/model/customer-contact.model.ts create mode 100644 src/main/webapp/app/shared/model/customer.model.ts create mode 100644 src/main/webapp/app/shared/model/membership.model.ts create mode 100644 src/main/webapp/app/shared/model/share.model.ts create mode 100644 src/main/webapp/i18n/de/asset.json create mode 100644 src/main/webapp/i18n/de/assetAction.json create mode 100644 src/main/webapp/i18n/de/contact.json create mode 100644 src/main/webapp/i18n/de/customer.json create mode 100644 src/main/webapp/i18n/de/customerContact.json create mode 100644 src/main/webapp/i18n/de/customerContactRole.json create mode 100644 src/main/webapp/i18n/de/membership.json create mode 100644 src/main/webapp/i18n/de/share.json create mode 100644 src/main/webapp/i18n/de/shareAction.json create mode 100644 src/main/webapp/i18n/en/asset.json create mode 100644 src/main/webapp/i18n/en/assetAction.json create mode 100644 src/main/webapp/i18n/en/contact.json create mode 100644 src/main/webapp/i18n/en/customer.json create mode 100644 src/main/webapp/i18n/en/customerContact.json create mode 100644 src/main/webapp/i18n/en/customerContactRole.json create mode 100644 src/main/webapp/i18n/en/membership.json create mode 100644 src/main/webapp/i18n/en/share.json create mode 100644 src/main/webapp/i18n/en/shareAction.json create mode 100644 src/test/java/org/hostsharing/hsadminng/web/rest/AssetResourceIntTest.java create mode 100644 src/test/java/org/hostsharing/hsadminng/web/rest/ContactResourceIntTest.java create mode 100644 src/test/java/org/hostsharing/hsadminng/web/rest/CustomerContactResourceIntTest.java create mode 100644 src/test/java/org/hostsharing/hsadminng/web/rest/CustomerResourceIntTest.java create mode 100644 src/test/java/org/hostsharing/hsadminng/web/rest/MembershipResourceIntTest.java create mode 100644 src/test/java/org/hostsharing/hsadminng/web/rest/ShareResourceIntTest.java create mode 100644 src/test/javascript/spec/app/entities/asset/asset-delete-dialog.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/asset/asset-detail.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/asset/asset-update.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/asset/asset.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/asset/asset.service.spec.ts create mode 100644 src/test/javascript/spec/app/entities/contact/contact-delete-dialog.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/contact/contact-detail.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/contact/contact-update.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/contact/contact.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/contact/contact.service.spec.ts create mode 100644 src/test/javascript/spec/app/entities/customer-contact/customer-contact-delete-dialog.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/customer-contact/customer-contact-detail.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/customer-contact/customer-contact-update.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/customer-contact/customer-contact.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/customer-contact/customer-contact.service.spec.ts create mode 100644 src/test/javascript/spec/app/entities/customer/customer-delete-dialog.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/customer/customer-detail.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/customer/customer-update.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/customer/customer.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/customer/customer.service.spec.ts create mode 100644 src/test/javascript/spec/app/entities/membership/membership-delete-dialog.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/membership/membership-detail.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/membership/membership-update.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/membership/membership.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/membership/membership.service.spec.ts create mode 100644 src/test/javascript/spec/app/entities/share/share-delete-dialog.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/share/share-detail.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/share/share-update.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/share/share.component.spec.ts create mode 100644 src/test/javascript/spec/app/entities/share/share.service.spec.ts diff --git a/.jhipster/Asset.json b/.jhipster/Asset.json new file mode 100644 index 00000000..baf8a85f --- /dev/null +++ b/.jhipster/Asset.json @@ -0,0 +1,53 @@ +{ + "name": "Asset", + "fields": [ + { + "fieldName": "date", + "fieldType": "LocalDate", + "fieldValidateRules": [ + "required" + ] + }, + { + "fieldName": "action", + "fieldType": "AssetAction", + "fieldValues": "PAYMENT,HANDOVER,ADOPTION,LOSS,CLEARING,PAYBACK", + "fieldValidateRules": [ + "required" + ] + }, + { + "fieldName": "amount", + "fieldType": "BigDecimal", + "fieldValidateRules": [ + "required" + ] + }, + { + "fieldName": "comment", + "fieldType": "String", + "fieldValidateRules": [ + "maxlength" + ], + "fieldValidateRulesMaxlength": 160 + } + ], + "relationships": [ + { + "relationshipType": "many-to-one", + "otherEntityName": "membership", + "otherEntityRelationshipName": "asset", + "relationshipName": "member", + "otherEntityField": "id" + } + ], + "changelogDate": "20190403083740", + "entityTableName": "asset", + "dto": "mapstruct", + "pagination": "infinite-scroll", + "service": "serviceClass", + "jpaMetamodelFiltering": true, + "fluentMethods": true, + "clientRootFolder": "", + "applications": "*" +} \ No newline at end of file diff --git a/.jhipster/Contact.json b/.jhipster/Contact.json new file mode 100644 index 00000000..e7aec648 --- /dev/null +++ b/.jhipster/Contact.json @@ -0,0 +1,49 @@ +{ + "name": "Contact", + "fields": [ + { + "fieldName": "firstName", + "fieldType": "String", + "fieldValidateRules": [ + "required", + "maxlength" + ], + "fieldValidateRulesMaxlength": 80 + }, + { + "fieldName": "lastName", + "fieldType": "String", + "fieldValidateRules": [ + "required", + "maxlength" + ], + "fieldValidateRulesMaxlength": 80 + }, + { + "fieldName": "email", + "fieldType": "String", + "fieldValidateRules": [ + "required", + "maxlength" + ], + "fieldValidateRulesMaxlength": 80 + } + ], + "relationships": [ + { + "relationshipType": "one-to-many", + "otherEntityName": "customerContact", + "otherEntityRelationshipName": "contact", + "relationshipName": "role" + } + ], + "changelogDate": "20190403083736", + "entityTableName": "contact", + "dto": "mapstruct", + "pagination": "infinite-scroll", + "service": "serviceClass", + "jpaMetamodelFiltering": true, + "fluentMethods": true, + "clientRootFolder": "", + "applications": "*" +} \ No newline at end of file diff --git a/.jhipster/Customer.json b/.jhipster/Customer.json new file mode 100644 index 00000000..9725cc51 --- /dev/null +++ b/.jhipster/Customer.json @@ -0,0 +1,50 @@ +{ + "name": "Customer", + "fields": [ + { + "fieldName": "number", + "fieldType": "Integer", + "fieldValidateRules": [ + "required", + "unique", + "min", + "max" + ], + "fieldValidateRulesMin": 10000, + "fieldValidateRulesMax": 99999 + }, + { + "fieldName": "prefix", + "fieldType": "String", + "fieldValidateRules": [ + "required", + "unique", + "pattern" + ], + "fieldValidateRulesPattern": "[a-z][a-z0-9]+" + } + ], + "relationships": [ + { + "relationshipType": "one-to-many", + "otherEntityName": "membership", + "otherEntityRelationshipName": "customer", + "relationshipName": "membership" + }, + { + "relationshipType": "one-to-many", + "otherEntityName": "customerContact", + "otherEntityRelationshipName": "customer", + "relationshipName": "role" + } + ], + "changelogDate": "20190403083735", + "entityTableName": "customer", + "dto": "mapstruct", + "pagination": "infinite-scroll", + "service": "serviceClass", + "jpaMetamodelFiltering": true, + "fluentMethods": true, + "clientRootFolder": "", + "applications": "*" +} \ No newline at end of file diff --git a/.jhipster/CustomerContact.json b/.jhipster/CustomerContact.json new file mode 100644 index 00000000..7004cae7 --- /dev/null +++ b/.jhipster/CustomerContact.json @@ -0,0 +1,40 @@ +{ + "name": "CustomerContact", + "fields": [ + { + "fieldName": "role", + "fieldType": "CustomerContactRole", + "fieldValues": "CONTRACTUAL,TECHNICAL,FINANCIAL", + "fieldValidateRules": [ + "required" + ] + } + ], + "relationships": [ + { + "relationshipType": "many-to-one", + "otherEntityName": "contact", + "otherEntityRelationshipName": "role", + "relationshipValidateRules": "required", + "relationshipName": "contact", + "otherEntityField": "email" + }, + { + "relationshipType": "many-to-one", + "otherEntityName": "customer", + "otherEntityRelationshipName": "role", + "relationshipValidateRules": "required", + "relationshipName": "customer", + "otherEntityField": "prefix" + } + ], + "changelogDate": "20190403083737", + "entityTableName": "customer_contact", + "dto": "mapstruct", + "pagination": "infinite-scroll", + "service": "serviceClass", + "jpaMetamodelFiltering": true, + "fluentMethods": true, + "clientRootFolder": "", + "applications": "*" +} \ No newline at end of file diff --git a/.jhipster/Membership.json b/.jhipster/Membership.json new file mode 100644 index 00000000..3c479c3f --- /dev/null +++ b/.jhipster/Membership.json @@ -0,0 +1,46 @@ +{ + "name": "Membership", + "fields": [ + { + "fieldName": "sinceDate", + "fieldType": "LocalDate", + "fieldValidateRules": [ + "required" + ] + }, + { + "fieldName": "untilDate", + "fieldType": "LocalDate" + } + ], + "relationships": [ + { + "relationshipType": "one-to-many", + "otherEntityName": "share", + "otherEntityRelationshipName": "member", + "relationshipName": "share" + }, + { + "relationshipType": "one-to-many", + "otherEntityName": "asset", + "otherEntityRelationshipName": "member", + "relationshipName": "asset" + }, + { + "relationshipType": "many-to-one", + "otherEntityName": "customer", + "otherEntityRelationshipName": "membership", + "relationshipName": "customer", + "otherEntityField": "prefix" + } + ], + "changelogDate": "20190403083738", + "entityTableName": "membership", + "dto": "mapstruct", + "pagination": "infinite-scroll", + "service": "serviceClass", + "jpaMetamodelFiltering": true, + "fluentMethods": true, + "clientRootFolder": "", + "applications": "*" +} \ No newline at end of file diff --git a/.jhipster/Share.json b/.jhipster/Share.json new file mode 100644 index 00000000..181ab499 --- /dev/null +++ b/.jhipster/Share.json @@ -0,0 +1,53 @@ +{ + "name": "Share", + "fields": [ + { + "fieldName": "date", + "fieldType": "LocalDate", + "fieldValidateRules": [ + "required" + ] + }, + { + "fieldName": "action", + "fieldType": "ShareAction", + "fieldValues": "SUBSCRIPTION,CANCELLATION", + "fieldValidateRules": [ + "required" + ] + }, + { + "fieldName": "quantity", + "fieldType": "Integer", + "fieldValidateRules": [ + "required" + ] + }, + { + "fieldName": "comment", + "fieldType": "String", + "fieldValidateRules": [ + "maxlength" + ], + "fieldValidateRulesMaxlength": 160 + } + ], + "relationships": [ + { + "relationshipType": "many-to-one", + "otherEntityName": "membership", + "otherEntityRelationshipName": "share", + "relationshipName": "member", + "otherEntityField": "id" + } + ], + "changelogDate": "20190403083739", + "entityTableName": "share", + "dto": "mapstruct", + "pagination": "infinite-scroll", + "service": "serviceClass", + "jpaMetamodelFiltering": true, + "fluentMethods": true, + "clientRootFolder": "", + "applications": "*" +} \ No newline at end of file diff --git a/src/main/java/org/hostsharing/hsadminng/domain/Asset.java b/src/main/java/org/hostsharing/hsadminng/domain/Asset.java new file mode 100644 index 00000000..2f7861c3 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/domain/Asset.java @@ -0,0 +1,156 @@ +package org.hostsharing.hsadminng.domain; + + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import javax.persistence.*; +import javax.validation.constraints.*; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Objects; + +import org.hostsharing.hsadminng.domain.enumeration.AssetAction; + +/** + * A Asset. + */ +@Entity +@Table(name = "asset") +public class Asset implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator") + @SequenceGenerator(name = "sequenceGenerator") + private Long id; + + @NotNull + @Column(name = "jhi_date", nullable = false) + private LocalDate date; + + @NotNull + @Enumerated(EnumType.STRING) + @Column(name = "action", nullable = false) + private AssetAction action; + + @NotNull + @Column(name = "amount", precision = 10, scale = 2, nullable = false) + private BigDecimal amount; + + @Size(max = 160) + @Column(name = "jhi_comment", length = 160) + private String comment; + + @ManyToOne + @JsonIgnoreProperties("assets") + private Membership member; + + // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public LocalDate getDate() { + return date; + } + + public Asset date(LocalDate date) { + this.date = date; + return this; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public AssetAction getAction() { + return action; + } + + public Asset action(AssetAction action) { + this.action = action; + return this; + } + + public void setAction(AssetAction action) { + this.action = action; + } + + public BigDecimal getAmount() { + return amount; + } + + public Asset amount(BigDecimal amount) { + this.amount = amount; + return this; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public String getComment() { + return comment; + } + + public Asset comment(String comment) { + this.comment = comment; + return this; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public Membership getMember() { + return member; + } + + public Asset member(Membership membership) { + this.member = membership; + return this; + } + + public void setMember(Membership membership) { + this.member = membership; + } + // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here, do not remove + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Asset asset = (Asset) o; + if (asset.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), asset.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "Asset{" + + "id=" + getId() + + ", date='" + getDate() + "'" + + ", action='" + getAction() + "'" + + ", amount=" + getAmount() + + ", comment='" + getComment() + "'" + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/domain/Contact.java b/src/main/java/org/hostsharing/hsadminng/domain/Contact.java new file mode 100644 index 00000000..761b9b90 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/domain/Contact.java @@ -0,0 +1,148 @@ +package org.hostsharing.hsadminng.domain; + + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import javax.persistence.*; +import javax.validation.constraints.*; + +import java.io.Serializable; +import java.util.HashSet; +import java.util.Set; +import java.util.Objects; + +/** + * A Contact. + */ +@Entity +@Table(name = "contact") +public class Contact implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator") + @SequenceGenerator(name = "sequenceGenerator") + private Long id; + + @NotNull + @Size(max = 80) + @Column(name = "first_name", length = 80, nullable = false) + private String firstName; + + @NotNull + @Size(max = 80) + @Column(name = "last_name", length = 80, nullable = false) + private String lastName; + + @NotNull + @Size(max = 80) + @Column(name = "email", length = 80, nullable = false) + private String email; + + @OneToMany(mappedBy = "contact") + private Set roles = new HashSet<>(); + // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public Contact firstName(String firstName) { + this.firstName = firstName; + return this; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public Contact lastName(String lastName) { + this.lastName = lastName; + return this; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public Contact email(String email) { + this.email = email; + return this; + } + + public void setEmail(String email) { + this.email = email; + } + + public Set getRoles() { + return roles; + } + + public Contact roles(Set customerContacts) { + this.roles = customerContacts; + return this; + } + + public Contact addRole(CustomerContact customerContact) { + this.roles.add(customerContact); + customerContact.setContact(this); + return this; + } + + public Contact removeRole(CustomerContact customerContact) { + this.roles.remove(customerContact); + customerContact.setContact(null); + return this; + } + + public void setRoles(Set customerContacts) { + this.roles = customerContacts; + } + // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here, do not remove + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Contact contact = (Contact) o; + if (contact.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), contact.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "Contact{" + + "id=" + getId() + + ", firstName='" + getFirstName() + "'" + + ", lastName='" + getLastName() + "'" + + ", email='" + getEmail() + "'" + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/domain/Customer.java b/src/main/java/org/hostsharing/hsadminng/domain/Customer.java new file mode 100644 index 00000000..00e10ab4 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/domain/Customer.java @@ -0,0 +1,157 @@ +package org.hostsharing.hsadminng.domain; + + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import javax.persistence.*; +import javax.validation.constraints.*; + +import java.io.Serializable; +import java.util.HashSet; +import java.util.Set; +import java.util.Objects; + +/** + * A Customer. + */ +@Entity +@Table(name = "customer") +public class Customer implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator") + @SequenceGenerator(name = "sequenceGenerator") + private Long id; + + @NotNull + @Min(value = 10000) + @Max(value = 99999) + @Column(name = "jhi_number", nullable = false, unique = true) + private Integer number; + + @NotNull + @Pattern(regexp = "[a-z][a-z0-9]+") + @Column(name = "prefix", nullable = false, unique = true) + private String prefix; + + @OneToMany(mappedBy = "customer") + private Set memberships = new HashSet<>(); + @OneToMany(mappedBy = "customer") + private Set roles = new HashSet<>(); + // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Integer getNumber() { + return number; + } + + public Customer number(Integer number) { + this.number = number; + return this; + } + + public void setNumber(Integer number) { + this.number = number; + } + + public String getPrefix() { + return prefix; + } + + public Customer prefix(String prefix) { + this.prefix = prefix; + return this; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public Set getMemberships() { + return memberships; + } + + public Customer memberships(Set memberships) { + this.memberships = memberships; + return this; + } + + public Customer addMembership(Membership membership) { + this.memberships.add(membership); + membership.setCustomer(this); + return this; + } + + public Customer removeMembership(Membership membership) { + this.memberships.remove(membership); + membership.setCustomer(null); + return this; + } + + public void setMemberships(Set memberships) { + this.memberships = memberships; + } + + public Set getRoles() { + return roles; + } + + public Customer roles(Set customerContacts) { + this.roles = customerContacts; + return this; + } + + public Customer addRole(CustomerContact customerContact) { + this.roles.add(customerContact); + customerContact.setCustomer(this); + return this; + } + + public Customer removeRole(CustomerContact customerContact) { + this.roles.remove(customerContact); + customerContact.setCustomer(null); + return this; + } + + public void setRoles(Set customerContacts) { + this.roles = customerContacts; + } + // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here, do not remove + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Customer customer = (Customer) o; + if (customer.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), customer.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "Customer{" + + "id=" + getId() + + ", number=" + getNumber() + + ", prefix='" + getPrefix() + "'" + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/domain/CustomerContact.java b/src/main/java/org/hostsharing/hsadminng/domain/CustomerContact.java new file mode 100644 index 00000000..f740361a --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/domain/CustomerContact.java @@ -0,0 +1,119 @@ +package org.hostsharing.hsadminng.domain; + + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import javax.persistence.*; +import javax.validation.constraints.*; + +import java.io.Serializable; +import java.util.Objects; + +import org.hostsharing.hsadminng.domain.enumeration.CustomerContactRole; + +/** + * A CustomerContact. + */ +@Entity +@Table(name = "customer_contact") +public class CustomerContact implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator") + @SequenceGenerator(name = "sequenceGenerator") + private Long id; + + @NotNull + @Enumerated(EnumType.STRING) + @Column(name = "jhi_role", nullable = false) + private CustomerContactRole role; + + @ManyToOne(optional = false) + @NotNull + @JsonIgnoreProperties("roles") + private Contact contact; + + @ManyToOne(optional = false) + @NotNull + @JsonIgnoreProperties("roles") + private Customer customer; + + // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public CustomerContactRole getRole() { + return role; + } + + public CustomerContact role(CustomerContactRole role) { + this.role = role; + return this; + } + + public void setRole(CustomerContactRole role) { + this.role = role; + } + + public Contact getContact() { + return contact; + } + + public CustomerContact contact(Contact contact) { + this.contact = contact; + return this; + } + + public void setContact(Contact contact) { + this.contact = contact; + } + + public Customer getCustomer() { + return customer; + } + + public CustomerContact customer(Customer customer) { + this.customer = customer; + return this; + } + + public void setCustomer(Customer customer) { + this.customer = customer; + } + // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here, do not remove + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CustomerContact customerContact = (CustomerContact) o; + if (customerContact.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), customerContact.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "CustomerContact{" + + "id=" + getId() + + ", role='" + getRole() + "'" + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/domain/Membership.java b/src/main/java/org/hostsharing/hsadminng/domain/Membership.java new file mode 100644 index 00000000..c3e15d50 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/domain/Membership.java @@ -0,0 +1,172 @@ +package org.hostsharing.hsadminng.domain; + + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import javax.persistence.*; +import javax.validation.constraints.*; + +import java.io.Serializable; +import java.time.LocalDate; +import java.util.HashSet; +import java.util.Set; +import java.util.Objects; + +/** + * A Membership. + */ +@Entity +@Table(name = "membership") +public class Membership implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator") + @SequenceGenerator(name = "sequenceGenerator") + private Long id; + + @NotNull + @Column(name = "since_date", nullable = false) + private LocalDate sinceDate; + + @Column(name = "until_date") + private LocalDate untilDate; + + @OneToMany(mappedBy = "member") + private Set shares = new HashSet<>(); + @OneToMany(mappedBy = "member") + private Set assets = new HashSet<>(); + @ManyToOne + @JsonIgnoreProperties("memberships") + private Customer customer; + + // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public LocalDate getSinceDate() { + return sinceDate; + } + + public Membership sinceDate(LocalDate sinceDate) { + this.sinceDate = sinceDate; + return this; + } + + public void setSinceDate(LocalDate sinceDate) { + this.sinceDate = sinceDate; + } + + public LocalDate getUntilDate() { + return untilDate; + } + + public Membership untilDate(LocalDate untilDate) { + this.untilDate = untilDate; + return this; + } + + public void setUntilDate(LocalDate untilDate) { + this.untilDate = untilDate; + } + + public Set getShares() { + return shares; + } + + public Membership shares(Set shares) { + this.shares = shares; + return this; + } + + public Membership addShare(Share share) { + this.shares.add(share); + share.setMember(this); + return this; + } + + public Membership removeShare(Share share) { + this.shares.remove(share); + share.setMember(null); + return this; + } + + public void setShares(Set shares) { + this.shares = shares; + } + + public Set getAssets() { + return assets; + } + + public Membership assets(Set assets) { + this.assets = assets; + return this; + } + + public Membership addAsset(Asset asset) { + this.assets.add(asset); + asset.setMember(this); + return this; + } + + public Membership removeAsset(Asset asset) { + this.assets.remove(asset); + asset.setMember(null); + return this; + } + + public void setAssets(Set assets) { + this.assets = assets; + } + + public Customer getCustomer() { + return customer; + } + + public Membership customer(Customer customer) { + this.customer = customer; + return this; + } + + public void setCustomer(Customer customer) { + this.customer = customer; + } + // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here, do not remove + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Membership membership = (Membership) o; + if (membership.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), membership.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "Membership{" + + "id=" + getId() + + ", sinceDate='" + getSinceDate() + "'" + + ", untilDate='" + getUntilDate() + "'" + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/domain/Share.java b/src/main/java/org/hostsharing/hsadminng/domain/Share.java new file mode 100644 index 00000000..c130fc23 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/domain/Share.java @@ -0,0 +1,155 @@ +package org.hostsharing.hsadminng.domain; + + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import javax.persistence.*; +import javax.validation.constraints.*; + +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Objects; + +import org.hostsharing.hsadminng.domain.enumeration.ShareAction; + +/** + * A Share. + */ +@Entity +@Table(name = "share") +public class Share implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator") + @SequenceGenerator(name = "sequenceGenerator") + private Long id; + + @NotNull + @Column(name = "jhi_date", nullable = false) + private LocalDate date; + + @NotNull + @Enumerated(EnumType.STRING) + @Column(name = "action", nullable = false) + private ShareAction action; + + @NotNull + @Column(name = "quantity", nullable = false) + private Integer quantity; + + @Size(max = 160) + @Column(name = "jhi_comment", length = 160) + private String comment; + + @ManyToOne + @JsonIgnoreProperties("shares") + private Membership member; + + // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public LocalDate getDate() { + return date; + } + + public Share date(LocalDate date) { + this.date = date; + return this; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public ShareAction getAction() { + return action; + } + + public Share action(ShareAction action) { + this.action = action; + return this; + } + + public void setAction(ShareAction action) { + this.action = action; + } + + public Integer getQuantity() { + return quantity; + } + + public Share quantity(Integer quantity) { + this.quantity = quantity; + return this; + } + + public void setQuantity(Integer quantity) { + this.quantity = quantity; + } + + public String getComment() { + return comment; + } + + public Share comment(String comment) { + this.comment = comment; + return this; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public Membership getMember() { + return member; + } + + public Share member(Membership membership) { + this.member = membership; + return this; + } + + public void setMember(Membership membership) { + this.member = membership; + } + // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here, do not remove + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Share share = (Share) o; + if (share.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), share.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "Share{" + + "id=" + getId() + + ", date='" + getDate() + "'" + + ", action='" + getAction() + "'" + + ", quantity=" + getQuantity() + + ", comment='" + getComment() + "'" + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/domain/enumeration/AssetAction.java b/src/main/java/org/hostsharing/hsadminng/domain/enumeration/AssetAction.java new file mode 100644 index 00000000..a42d7a04 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/domain/enumeration/AssetAction.java @@ -0,0 +1,8 @@ +package org.hostsharing.hsadminng.domain.enumeration; + +/** + * The AssetAction enumeration. + */ +public enum AssetAction { + PAYMENT, HANDOVER, ADOPTION, LOSS, CLEARING, PAYBACK +} diff --git a/src/main/java/org/hostsharing/hsadminng/domain/enumeration/CustomerContactRole.java b/src/main/java/org/hostsharing/hsadminng/domain/enumeration/CustomerContactRole.java new file mode 100644 index 00000000..736a7ff6 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/domain/enumeration/CustomerContactRole.java @@ -0,0 +1,8 @@ +package org.hostsharing.hsadminng.domain.enumeration; + +/** + * The CustomerContactRole enumeration. + */ +public enum CustomerContactRole { + CONTRACTUAL, TECHNICAL, FINANCIAL +} diff --git a/src/main/java/org/hostsharing/hsadminng/domain/enumeration/ShareAction.java b/src/main/java/org/hostsharing/hsadminng/domain/enumeration/ShareAction.java new file mode 100644 index 00000000..032d8638 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/domain/enumeration/ShareAction.java @@ -0,0 +1,8 @@ +package org.hostsharing.hsadminng.domain.enumeration; + +/** + * The ShareAction enumeration. + */ +public enum ShareAction { + SUBSCRIPTION, CANCELLATION +} diff --git a/src/main/java/org/hostsharing/hsadminng/repository/AssetRepository.java b/src/main/java/org/hostsharing/hsadminng/repository/AssetRepository.java new file mode 100644 index 00000000..31c5a947 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/repository/AssetRepository.java @@ -0,0 +1,15 @@ +package org.hostsharing.hsadminng.repository; + +import org.hostsharing.hsadminng.domain.Asset; +import org.springframework.data.jpa.repository.*; +import org.springframework.stereotype.Repository; + + +/** + * Spring Data repository for the Asset entity. + */ +@SuppressWarnings("unused") +@Repository +public interface AssetRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/src/main/java/org/hostsharing/hsadminng/repository/ContactRepository.java b/src/main/java/org/hostsharing/hsadminng/repository/ContactRepository.java new file mode 100644 index 00000000..6bc2d4dc --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/repository/ContactRepository.java @@ -0,0 +1,15 @@ +package org.hostsharing.hsadminng.repository; + +import org.hostsharing.hsadminng.domain.Contact; +import org.springframework.data.jpa.repository.*; +import org.springframework.stereotype.Repository; + + +/** + * Spring Data repository for the Contact entity. + */ +@SuppressWarnings("unused") +@Repository +public interface ContactRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/src/main/java/org/hostsharing/hsadminng/repository/CustomerContactRepository.java b/src/main/java/org/hostsharing/hsadminng/repository/CustomerContactRepository.java new file mode 100644 index 00000000..88dba2c9 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/repository/CustomerContactRepository.java @@ -0,0 +1,15 @@ +package org.hostsharing.hsadminng.repository; + +import org.hostsharing.hsadminng.domain.CustomerContact; +import org.springframework.data.jpa.repository.*; +import org.springframework.stereotype.Repository; + + +/** + * Spring Data repository for the CustomerContact entity. + */ +@SuppressWarnings("unused") +@Repository +public interface CustomerContactRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/src/main/java/org/hostsharing/hsadminng/repository/CustomerRepository.java b/src/main/java/org/hostsharing/hsadminng/repository/CustomerRepository.java new file mode 100644 index 00000000..11367351 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/repository/CustomerRepository.java @@ -0,0 +1,15 @@ +package org.hostsharing.hsadminng.repository; + +import org.hostsharing.hsadminng.domain.Customer; +import org.springframework.data.jpa.repository.*; +import org.springframework.stereotype.Repository; + + +/** + * Spring Data repository for the Customer entity. + */ +@SuppressWarnings("unused") +@Repository +public interface CustomerRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/src/main/java/org/hostsharing/hsadminng/repository/MembershipRepository.java b/src/main/java/org/hostsharing/hsadminng/repository/MembershipRepository.java new file mode 100644 index 00000000..8382a19b --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/repository/MembershipRepository.java @@ -0,0 +1,15 @@ +package org.hostsharing.hsadminng.repository; + +import org.hostsharing.hsadminng.domain.Membership; +import org.springframework.data.jpa.repository.*; +import org.springframework.stereotype.Repository; + + +/** + * Spring Data repository for the Membership entity. + */ +@SuppressWarnings("unused") +@Repository +public interface MembershipRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/src/main/java/org/hostsharing/hsadminng/repository/ShareRepository.java b/src/main/java/org/hostsharing/hsadminng/repository/ShareRepository.java new file mode 100644 index 00000000..660f4d9b --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/repository/ShareRepository.java @@ -0,0 +1,15 @@ +package org.hostsharing.hsadminng.repository; + +import org.hostsharing.hsadminng.domain.Share; +import org.springframework.data.jpa.repository.*; +import org.springframework.stereotype.Repository; + + +/** + * Spring Data repository for the Share entity. + */ +@SuppressWarnings("unused") +@Repository +public interface ShareRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/AssetQueryService.java b/src/main/java/org/hostsharing/hsadminng/service/AssetQueryService.java new file mode 100644 index 00000000..81853758 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/AssetQueryService.java @@ -0,0 +1,111 @@ +package org.hostsharing.hsadminng.service; + +import java.util.List; + +import javax.persistence.criteria.JoinType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import io.github.jhipster.service.QueryService; + +import org.hostsharing.hsadminng.domain.Asset; +import org.hostsharing.hsadminng.domain.*; // for static metamodels +import org.hostsharing.hsadminng.repository.AssetRepository; +import org.hostsharing.hsadminng.service.dto.AssetCriteria; +import org.hostsharing.hsadminng.service.dto.AssetDTO; +import org.hostsharing.hsadminng.service.mapper.AssetMapper; + +/** + * Service for executing complex queries for Asset entities in the database. + * The main input is a {@link AssetCriteria} which gets converted to {@link Specification}, + * in a way that all the filters must apply. + * It returns a {@link List} of {@link AssetDTO} or a {@link Page} of {@link AssetDTO} which fulfills the criteria. + */ +@Service +@Transactional(readOnly = true) +public class AssetQueryService extends QueryService { + + private final Logger log = LoggerFactory.getLogger(AssetQueryService.class); + + private final AssetRepository assetRepository; + + private final AssetMapper assetMapper; + + public AssetQueryService(AssetRepository assetRepository, AssetMapper assetMapper) { + this.assetRepository = assetRepository; + this.assetMapper = assetMapper; + } + + /** + * Return a {@link List} of {@link AssetDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public List findByCriteria(AssetCriteria criteria) { + log.debug("find by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return assetMapper.toDto(assetRepository.findAll(specification)); + } + + /** + * Return a {@link Page} of {@link AssetDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @param page The page, which should be returned. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public Page findByCriteria(AssetCriteria criteria, Pageable page) { + log.debug("find by criteria : {}, page: {}", criteria, page); + final Specification specification = createSpecification(criteria); + return assetRepository.findAll(specification, page) + .map(assetMapper::toDto); + } + + /** + * Return the number of matching entities in the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the number of matching entities. + */ + @Transactional(readOnly = true) + public long countByCriteria(AssetCriteria criteria) { + log.debug("count by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return assetRepository.count(specification); + } + + /** + * Function to convert AssetCriteria to a {@link Specification} + */ + private Specification createSpecification(AssetCriteria criteria) { + Specification specification = Specification.where(null); + if (criteria != null) { + if (criteria.getId() != null) { + specification = specification.and(buildSpecification(criteria.getId(), Asset_.id)); + } + if (criteria.getDate() != null) { + specification = specification.and(buildRangeSpecification(criteria.getDate(), Asset_.date)); + } + if (criteria.getAction() != null) { + specification = specification.and(buildSpecification(criteria.getAction(), Asset_.action)); + } + if (criteria.getAmount() != null) { + specification = specification.and(buildRangeSpecification(criteria.getAmount(), Asset_.amount)); + } + if (criteria.getComment() != null) { + specification = specification.and(buildStringSpecification(criteria.getComment(), Asset_.comment)); + } + if (criteria.getMemberId() != null) { + specification = specification.and(buildSpecification(criteria.getMemberId(), + root -> root.join(Asset_.member, JoinType.LEFT).get(Membership_.id))); + } + } + return specification; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/AssetService.java b/src/main/java/org/hostsharing/hsadminng/service/AssetService.java new file mode 100644 index 00000000..0b6ab5a9 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/AssetService.java @@ -0,0 +1,84 @@ +package org.hostsharing.hsadminng.service; + +import org.hostsharing.hsadminng.domain.Asset; +import org.hostsharing.hsadminng.repository.AssetRepository; +import org.hostsharing.hsadminng.service.dto.AssetDTO; +import org.hostsharing.hsadminng.service.mapper.AssetMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +/** + * Service Implementation for managing Asset. + */ +@Service +@Transactional +public class AssetService { + + private final Logger log = LoggerFactory.getLogger(AssetService.class); + + private final AssetRepository assetRepository; + + private final AssetMapper assetMapper; + + public AssetService(AssetRepository assetRepository, AssetMapper assetMapper) { + this.assetRepository = assetRepository; + this.assetMapper = assetMapper; + } + + /** + * Save a asset. + * + * @param assetDTO the entity to save + * @return the persisted entity + */ + public AssetDTO save(AssetDTO assetDTO) { + log.debug("Request to save Asset : {}", assetDTO); + Asset asset = assetMapper.toEntity(assetDTO); + asset = assetRepository.save(asset); + return assetMapper.toDto(asset); + } + + /** + * Get all the assets. + * + * @param pageable the pagination information + * @return the list of entities + */ + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + log.debug("Request to get all Assets"); + return assetRepository.findAll(pageable) + .map(assetMapper::toDto); + } + + + /** + * Get one asset by id. + * + * @param id the id of the entity + * @return the entity + */ + @Transactional(readOnly = true) + public Optional findOne(Long id) { + log.debug("Request to get Asset : {}", id); + return assetRepository.findById(id) + .map(assetMapper::toDto); + } + + /** + * Delete the asset by id. + * + * @param id the id of the entity + */ + public void delete(Long id) { + log.debug("Request to delete Asset : {}", id); + assetRepository.deleteById(id); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/ContactQueryService.java b/src/main/java/org/hostsharing/hsadminng/service/ContactQueryService.java new file mode 100644 index 00000000..6c153b1b --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/ContactQueryService.java @@ -0,0 +1,108 @@ +package org.hostsharing.hsadminng.service; + +import java.util.List; + +import javax.persistence.criteria.JoinType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import io.github.jhipster.service.QueryService; + +import org.hostsharing.hsadminng.domain.Contact; +import org.hostsharing.hsadminng.domain.*; // for static metamodels +import org.hostsharing.hsadminng.repository.ContactRepository; +import org.hostsharing.hsadminng.service.dto.ContactCriteria; +import org.hostsharing.hsadminng.service.dto.ContactDTO; +import org.hostsharing.hsadminng.service.mapper.ContactMapper; + +/** + * Service for executing complex queries for Contact entities in the database. + * The main input is a {@link ContactCriteria} which gets converted to {@link Specification}, + * in a way that all the filters must apply. + * It returns a {@link List} of {@link ContactDTO} or a {@link Page} of {@link ContactDTO} which fulfills the criteria. + */ +@Service +@Transactional(readOnly = true) +public class ContactQueryService extends QueryService { + + private final Logger log = LoggerFactory.getLogger(ContactQueryService.class); + + private final ContactRepository contactRepository; + + private final ContactMapper contactMapper; + + public ContactQueryService(ContactRepository contactRepository, ContactMapper contactMapper) { + this.contactRepository = contactRepository; + this.contactMapper = contactMapper; + } + + /** + * Return a {@link List} of {@link ContactDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public List findByCriteria(ContactCriteria criteria) { + log.debug("find by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return contactMapper.toDto(contactRepository.findAll(specification)); + } + + /** + * Return a {@link Page} of {@link ContactDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @param page The page, which should be returned. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public Page findByCriteria(ContactCriteria criteria, Pageable page) { + log.debug("find by criteria : {}, page: {}", criteria, page); + final Specification specification = createSpecification(criteria); + return contactRepository.findAll(specification, page) + .map(contactMapper::toDto); + } + + /** + * Return the number of matching entities in the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the number of matching entities. + */ + @Transactional(readOnly = true) + public long countByCriteria(ContactCriteria criteria) { + log.debug("count by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return contactRepository.count(specification); + } + + /** + * Function to convert ContactCriteria to a {@link Specification} + */ + private Specification createSpecification(ContactCriteria criteria) { + Specification specification = Specification.where(null); + if (criteria != null) { + if (criteria.getId() != null) { + specification = specification.and(buildSpecification(criteria.getId(), Contact_.id)); + } + if (criteria.getFirstName() != null) { + specification = specification.and(buildStringSpecification(criteria.getFirstName(), Contact_.firstName)); + } + if (criteria.getLastName() != null) { + specification = specification.and(buildStringSpecification(criteria.getLastName(), Contact_.lastName)); + } + if (criteria.getEmail() != null) { + specification = specification.and(buildStringSpecification(criteria.getEmail(), Contact_.email)); + } + if (criteria.getRoleId() != null) { + specification = specification.and(buildSpecification(criteria.getRoleId(), + root -> root.join(Contact_.roles, JoinType.LEFT).get(CustomerContact_.id))); + } + } + return specification; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/ContactService.java b/src/main/java/org/hostsharing/hsadminng/service/ContactService.java new file mode 100644 index 00000000..d75b7fb3 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/ContactService.java @@ -0,0 +1,84 @@ +package org.hostsharing.hsadminng.service; + +import org.hostsharing.hsadminng.domain.Contact; +import org.hostsharing.hsadminng.repository.ContactRepository; +import org.hostsharing.hsadminng.service.dto.ContactDTO; +import org.hostsharing.hsadminng.service.mapper.ContactMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +/** + * Service Implementation for managing Contact. + */ +@Service +@Transactional +public class ContactService { + + private final Logger log = LoggerFactory.getLogger(ContactService.class); + + private final ContactRepository contactRepository; + + private final ContactMapper contactMapper; + + public ContactService(ContactRepository contactRepository, ContactMapper contactMapper) { + this.contactRepository = contactRepository; + this.contactMapper = contactMapper; + } + + /** + * Save a contact. + * + * @param contactDTO the entity to save + * @return the persisted entity + */ + public ContactDTO save(ContactDTO contactDTO) { + log.debug("Request to save Contact : {}", contactDTO); + Contact contact = contactMapper.toEntity(contactDTO); + contact = contactRepository.save(contact); + return contactMapper.toDto(contact); + } + + /** + * Get all the contacts. + * + * @param pageable the pagination information + * @return the list of entities + */ + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + log.debug("Request to get all Contacts"); + return contactRepository.findAll(pageable) + .map(contactMapper::toDto); + } + + + /** + * Get one contact by id. + * + * @param id the id of the entity + * @return the entity + */ + @Transactional(readOnly = true) + public Optional findOne(Long id) { + log.debug("Request to get Contact : {}", id); + return contactRepository.findById(id) + .map(contactMapper::toDto); + } + + /** + * Delete the contact by id. + * + * @param id the id of the entity + */ + public void delete(Long id) { + log.debug("Request to delete Contact : {}", id); + contactRepository.deleteById(id); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/CustomerContactQueryService.java b/src/main/java/org/hostsharing/hsadminng/service/CustomerContactQueryService.java new file mode 100644 index 00000000..3675596d --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/CustomerContactQueryService.java @@ -0,0 +1,106 @@ +package org.hostsharing.hsadminng.service; + +import java.util.List; + +import javax.persistence.criteria.JoinType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import io.github.jhipster.service.QueryService; + +import org.hostsharing.hsadminng.domain.CustomerContact; +import org.hostsharing.hsadminng.domain.*; // for static metamodels +import org.hostsharing.hsadminng.repository.CustomerContactRepository; +import org.hostsharing.hsadminng.service.dto.CustomerContactCriteria; +import org.hostsharing.hsadminng.service.dto.CustomerContactDTO; +import org.hostsharing.hsadminng.service.mapper.CustomerContactMapper; + +/** + * Service for executing complex queries for CustomerContact entities in the database. + * The main input is a {@link CustomerContactCriteria} which gets converted to {@link Specification}, + * in a way that all the filters must apply. + * It returns a {@link List} of {@link CustomerContactDTO} or a {@link Page} of {@link CustomerContactDTO} which fulfills the criteria. + */ +@Service +@Transactional(readOnly = true) +public class CustomerContactQueryService extends QueryService { + + private final Logger log = LoggerFactory.getLogger(CustomerContactQueryService.class); + + private final CustomerContactRepository customerContactRepository; + + private final CustomerContactMapper customerContactMapper; + + public CustomerContactQueryService(CustomerContactRepository customerContactRepository, CustomerContactMapper customerContactMapper) { + this.customerContactRepository = customerContactRepository; + this.customerContactMapper = customerContactMapper; + } + + /** + * Return a {@link List} of {@link CustomerContactDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public List findByCriteria(CustomerContactCriteria criteria) { + log.debug("find by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return customerContactMapper.toDto(customerContactRepository.findAll(specification)); + } + + /** + * Return a {@link Page} of {@link CustomerContactDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @param page The page, which should be returned. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public Page findByCriteria(CustomerContactCriteria criteria, Pageable page) { + log.debug("find by criteria : {}, page: {}", criteria, page); + final Specification specification = createSpecification(criteria); + return customerContactRepository.findAll(specification, page) + .map(customerContactMapper::toDto); + } + + /** + * Return the number of matching entities in the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the number of matching entities. + */ + @Transactional(readOnly = true) + public long countByCriteria(CustomerContactCriteria criteria) { + log.debug("count by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return customerContactRepository.count(specification); + } + + /** + * Function to convert CustomerContactCriteria to a {@link Specification} + */ + private Specification createSpecification(CustomerContactCriteria criteria) { + Specification specification = Specification.where(null); + if (criteria != null) { + if (criteria.getId() != null) { + specification = specification.and(buildSpecification(criteria.getId(), CustomerContact_.id)); + } + if (criteria.getRole() != null) { + specification = specification.and(buildSpecification(criteria.getRole(), CustomerContact_.role)); + } + if (criteria.getContactId() != null) { + specification = specification.and(buildSpecification(criteria.getContactId(), + root -> root.join(CustomerContact_.contact, JoinType.LEFT).get(Contact_.id))); + } + if (criteria.getCustomerId() != null) { + specification = specification.and(buildSpecification(criteria.getCustomerId(), + root -> root.join(CustomerContact_.customer, JoinType.LEFT).get(Customer_.id))); + } + } + return specification; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/CustomerContactService.java b/src/main/java/org/hostsharing/hsadminng/service/CustomerContactService.java new file mode 100644 index 00000000..222ae0a8 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/CustomerContactService.java @@ -0,0 +1,84 @@ +package org.hostsharing.hsadminng.service; + +import org.hostsharing.hsadminng.domain.CustomerContact; +import org.hostsharing.hsadminng.repository.CustomerContactRepository; +import org.hostsharing.hsadminng.service.dto.CustomerContactDTO; +import org.hostsharing.hsadminng.service.mapper.CustomerContactMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +/** + * Service Implementation for managing CustomerContact. + */ +@Service +@Transactional +public class CustomerContactService { + + private final Logger log = LoggerFactory.getLogger(CustomerContactService.class); + + private final CustomerContactRepository customerContactRepository; + + private final CustomerContactMapper customerContactMapper; + + public CustomerContactService(CustomerContactRepository customerContactRepository, CustomerContactMapper customerContactMapper) { + this.customerContactRepository = customerContactRepository; + this.customerContactMapper = customerContactMapper; + } + + /** + * Save a customerContact. + * + * @param customerContactDTO the entity to save + * @return the persisted entity + */ + public CustomerContactDTO save(CustomerContactDTO customerContactDTO) { + log.debug("Request to save CustomerContact : {}", customerContactDTO); + CustomerContact customerContact = customerContactMapper.toEntity(customerContactDTO); + customerContact = customerContactRepository.save(customerContact); + return customerContactMapper.toDto(customerContact); + } + + /** + * Get all the customerContacts. + * + * @param pageable the pagination information + * @return the list of entities + */ + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + log.debug("Request to get all CustomerContacts"); + return customerContactRepository.findAll(pageable) + .map(customerContactMapper::toDto); + } + + + /** + * Get one customerContact by id. + * + * @param id the id of the entity + * @return the entity + */ + @Transactional(readOnly = true) + public Optional findOne(Long id) { + log.debug("Request to get CustomerContact : {}", id); + return customerContactRepository.findById(id) + .map(customerContactMapper::toDto); + } + + /** + * Delete the customerContact by id. + * + * @param id the id of the entity + */ + public void delete(Long id) { + log.debug("Request to delete CustomerContact : {}", id); + customerContactRepository.deleteById(id); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/CustomerQueryService.java b/src/main/java/org/hostsharing/hsadminng/service/CustomerQueryService.java new file mode 100644 index 00000000..a2a6b056 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/CustomerQueryService.java @@ -0,0 +1,109 @@ +package org.hostsharing.hsadminng.service; + +import java.util.List; + +import javax.persistence.criteria.JoinType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import io.github.jhipster.service.QueryService; + +import org.hostsharing.hsadminng.domain.Customer; +import org.hostsharing.hsadminng.domain.*; // for static metamodels +import org.hostsharing.hsadminng.repository.CustomerRepository; +import org.hostsharing.hsadminng.service.dto.CustomerCriteria; +import org.hostsharing.hsadminng.service.dto.CustomerDTO; +import org.hostsharing.hsadminng.service.mapper.CustomerMapper; + +/** + * Service for executing complex queries for Customer entities in the database. + * The main input is a {@link CustomerCriteria} which gets converted to {@link Specification}, + * in a way that all the filters must apply. + * It returns a {@link List} of {@link CustomerDTO} or a {@link Page} of {@link CustomerDTO} which fulfills the criteria. + */ +@Service +@Transactional(readOnly = true) +public class CustomerQueryService extends QueryService { + + private final Logger log = LoggerFactory.getLogger(CustomerQueryService.class); + + private final CustomerRepository customerRepository; + + private final CustomerMapper customerMapper; + + public CustomerQueryService(CustomerRepository customerRepository, CustomerMapper customerMapper) { + this.customerRepository = customerRepository; + this.customerMapper = customerMapper; + } + + /** + * Return a {@link List} of {@link CustomerDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public List findByCriteria(CustomerCriteria criteria) { + log.debug("find by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return customerMapper.toDto(customerRepository.findAll(specification)); + } + + /** + * Return a {@link Page} of {@link CustomerDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @param page The page, which should be returned. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public Page findByCriteria(CustomerCriteria criteria, Pageable page) { + log.debug("find by criteria : {}, page: {}", criteria, page); + final Specification specification = createSpecification(criteria); + return customerRepository.findAll(specification, page) + .map(customerMapper::toDto); + } + + /** + * Return the number of matching entities in the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the number of matching entities. + */ + @Transactional(readOnly = true) + public long countByCriteria(CustomerCriteria criteria) { + log.debug("count by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return customerRepository.count(specification); + } + + /** + * Function to convert CustomerCriteria to a {@link Specification} + */ + private Specification createSpecification(CustomerCriteria criteria) { + Specification specification = Specification.where(null); + if (criteria != null) { + if (criteria.getId() != null) { + specification = specification.and(buildSpecification(criteria.getId(), Customer_.id)); + } + if (criteria.getNumber() != null) { + specification = specification.and(buildRangeSpecification(criteria.getNumber(), Customer_.number)); + } + if (criteria.getPrefix() != null) { + specification = specification.and(buildStringSpecification(criteria.getPrefix(), Customer_.prefix)); + } + if (criteria.getMembershipId() != null) { + specification = specification.and(buildSpecification(criteria.getMembershipId(), + root -> root.join(Customer_.memberships, JoinType.LEFT).get(Membership_.id))); + } + if (criteria.getRoleId() != null) { + specification = specification.and(buildSpecification(criteria.getRoleId(), + root -> root.join(Customer_.roles, JoinType.LEFT).get(CustomerContact_.id))); + } + } + return specification; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/CustomerService.java b/src/main/java/org/hostsharing/hsadminng/service/CustomerService.java new file mode 100644 index 00000000..d7153deb --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/CustomerService.java @@ -0,0 +1,84 @@ +package org.hostsharing.hsadminng.service; + +import org.hostsharing.hsadminng.domain.Customer; +import org.hostsharing.hsadminng.repository.CustomerRepository; +import org.hostsharing.hsadminng.service.dto.CustomerDTO; +import org.hostsharing.hsadminng.service.mapper.CustomerMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +/** + * Service Implementation for managing Customer. + */ +@Service +@Transactional +public class CustomerService { + + private final Logger log = LoggerFactory.getLogger(CustomerService.class); + + private final CustomerRepository customerRepository; + + private final CustomerMapper customerMapper; + + public CustomerService(CustomerRepository customerRepository, CustomerMapper customerMapper) { + this.customerRepository = customerRepository; + this.customerMapper = customerMapper; + } + + /** + * Save a customer. + * + * @param customerDTO the entity to save + * @return the persisted entity + */ + public CustomerDTO save(CustomerDTO customerDTO) { + log.debug("Request to save Customer : {}", customerDTO); + Customer customer = customerMapper.toEntity(customerDTO); + customer = customerRepository.save(customer); + return customerMapper.toDto(customer); + } + + /** + * Get all the customers. + * + * @param pageable the pagination information + * @return the list of entities + */ + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + log.debug("Request to get all Customers"); + return customerRepository.findAll(pageable) + .map(customerMapper::toDto); + } + + + /** + * Get one customer by id. + * + * @param id the id of the entity + * @return the entity + */ + @Transactional(readOnly = true) + public Optional findOne(Long id) { + log.debug("Request to get Customer : {}", id); + return customerRepository.findById(id) + .map(customerMapper::toDto); + } + + /** + * Delete the customer by id. + * + * @param id the id of the entity + */ + public void delete(Long id) { + log.debug("Request to delete Customer : {}", id); + customerRepository.deleteById(id); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/MembershipQueryService.java b/src/main/java/org/hostsharing/hsadminng/service/MembershipQueryService.java new file mode 100644 index 00000000..66f86f14 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/MembershipQueryService.java @@ -0,0 +1,113 @@ +package org.hostsharing.hsadminng.service; + +import java.util.List; + +import javax.persistence.criteria.JoinType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import io.github.jhipster.service.QueryService; + +import org.hostsharing.hsadminng.domain.Membership; +import org.hostsharing.hsadminng.domain.*; // for static metamodels +import org.hostsharing.hsadminng.repository.MembershipRepository; +import org.hostsharing.hsadminng.service.dto.MembershipCriteria; +import org.hostsharing.hsadminng.service.dto.MembershipDTO; +import org.hostsharing.hsadminng.service.mapper.MembershipMapper; + +/** + * Service for executing complex queries for Membership entities in the database. + * The main input is a {@link MembershipCriteria} which gets converted to {@link Specification}, + * in a way that all the filters must apply. + * It returns a {@link List} of {@link MembershipDTO} or a {@link Page} of {@link MembershipDTO} which fulfills the criteria. + */ +@Service +@Transactional(readOnly = true) +public class MembershipQueryService extends QueryService { + + private final Logger log = LoggerFactory.getLogger(MembershipQueryService.class); + + private final MembershipRepository membershipRepository; + + private final MembershipMapper membershipMapper; + + public MembershipQueryService(MembershipRepository membershipRepository, MembershipMapper membershipMapper) { + this.membershipRepository = membershipRepository; + this.membershipMapper = membershipMapper; + } + + /** + * Return a {@link List} of {@link MembershipDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public List findByCriteria(MembershipCriteria criteria) { + log.debug("find by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return membershipMapper.toDto(membershipRepository.findAll(specification)); + } + + /** + * Return a {@link Page} of {@link MembershipDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @param page The page, which should be returned. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public Page findByCriteria(MembershipCriteria criteria, Pageable page) { + log.debug("find by criteria : {}, page: {}", criteria, page); + final Specification specification = createSpecification(criteria); + return membershipRepository.findAll(specification, page) + .map(membershipMapper::toDto); + } + + /** + * Return the number of matching entities in the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the number of matching entities. + */ + @Transactional(readOnly = true) + public long countByCriteria(MembershipCriteria criteria) { + log.debug("count by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return membershipRepository.count(specification); + } + + /** + * Function to convert MembershipCriteria to a {@link Specification} + */ + private Specification createSpecification(MembershipCriteria criteria) { + Specification specification = Specification.where(null); + if (criteria != null) { + if (criteria.getId() != null) { + specification = specification.and(buildSpecification(criteria.getId(), Membership_.id)); + } + if (criteria.getSinceDate() != null) { + specification = specification.and(buildRangeSpecification(criteria.getSinceDate(), Membership_.sinceDate)); + } + if (criteria.getUntilDate() != null) { + specification = specification.and(buildRangeSpecification(criteria.getUntilDate(), Membership_.untilDate)); + } + if (criteria.getShareId() != null) { + specification = specification.and(buildSpecification(criteria.getShareId(), + root -> root.join(Membership_.shares, JoinType.LEFT).get(Share_.id))); + } + if (criteria.getAssetId() != null) { + specification = specification.and(buildSpecification(criteria.getAssetId(), + root -> root.join(Membership_.assets, JoinType.LEFT).get(Asset_.id))); + } + if (criteria.getCustomerId() != null) { + specification = specification.and(buildSpecification(criteria.getCustomerId(), + root -> root.join(Membership_.customer, JoinType.LEFT).get(Customer_.id))); + } + } + return specification; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/MembershipService.java b/src/main/java/org/hostsharing/hsadminng/service/MembershipService.java new file mode 100644 index 00000000..53fb74cb --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/MembershipService.java @@ -0,0 +1,84 @@ +package org.hostsharing.hsadminng.service; + +import org.hostsharing.hsadminng.domain.Membership; +import org.hostsharing.hsadminng.repository.MembershipRepository; +import org.hostsharing.hsadminng.service.dto.MembershipDTO; +import org.hostsharing.hsadminng.service.mapper.MembershipMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +/** + * Service Implementation for managing Membership. + */ +@Service +@Transactional +public class MembershipService { + + private final Logger log = LoggerFactory.getLogger(MembershipService.class); + + private final MembershipRepository membershipRepository; + + private final MembershipMapper membershipMapper; + + public MembershipService(MembershipRepository membershipRepository, MembershipMapper membershipMapper) { + this.membershipRepository = membershipRepository; + this.membershipMapper = membershipMapper; + } + + /** + * Save a membership. + * + * @param membershipDTO the entity to save + * @return the persisted entity + */ + public MembershipDTO save(MembershipDTO membershipDTO) { + log.debug("Request to save Membership : {}", membershipDTO); + Membership membership = membershipMapper.toEntity(membershipDTO); + membership = membershipRepository.save(membership); + return membershipMapper.toDto(membership); + } + + /** + * Get all the memberships. + * + * @param pageable the pagination information + * @return the list of entities + */ + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + log.debug("Request to get all Memberships"); + return membershipRepository.findAll(pageable) + .map(membershipMapper::toDto); + } + + + /** + * Get one membership by id. + * + * @param id the id of the entity + * @return the entity + */ + @Transactional(readOnly = true) + public Optional findOne(Long id) { + log.debug("Request to get Membership : {}", id); + return membershipRepository.findById(id) + .map(membershipMapper::toDto); + } + + /** + * Delete the membership by id. + * + * @param id the id of the entity + */ + public void delete(Long id) { + log.debug("Request to delete Membership : {}", id); + membershipRepository.deleteById(id); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/ShareQueryService.java b/src/main/java/org/hostsharing/hsadminng/service/ShareQueryService.java new file mode 100644 index 00000000..17e51676 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/ShareQueryService.java @@ -0,0 +1,111 @@ +package org.hostsharing.hsadminng.service; + +import java.util.List; + +import javax.persistence.criteria.JoinType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import io.github.jhipster.service.QueryService; + +import org.hostsharing.hsadminng.domain.Share; +import org.hostsharing.hsadminng.domain.*; // for static metamodels +import org.hostsharing.hsadminng.repository.ShareRepository; +import org.hostsharing.hsadminng.service.dto.ShareCriteria; +import org.hostsharing.hsadminng.service.dto.ShareDTO; +import org.hostsharing.hsadminng.service.mapper.ShareMapper; + +/** + * Service for executing complex queries for Share entities in the database. + * The main input is a {@link ShareCriteria} which gets converted to {@link Specification}, + * in a way that all the filters must apply. + * It returns a {@link List} of {@link ShareDTO} or a {@link Page} of {@link ShareDTO} which fulfills the criteria. + */ +@Service +@Transactional(readOnly = true) +public class ShareQueryService extends QueryService { + + private final Logger log = LoggerFactory.getLogger(ShareQueryService.class); + + private final ShareRepository shareRepository; + + private final ShareMapper shareMapper; + + public ShareQueryService(ShareRepository shareRepository, ShareMapper shareMapper) { + this.shareRepository = shareRepository; + this.shareMapper = shareMapper; + } + + /** + * Return a {@link List} of {@link ShareDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public List findByCriteria(ShareCriteria criteria) { + log.debug("find by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return shareMapper.toDto(shareRepository.findAll(specification)); + } + + /** + * Return a {@link Page} of {@link ShareDTO} which matches the criteria from the database + * @param criteria The object which holds all the filters, which the entities should match. + * @param page The page, which should be returned. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public Page findByCriteria(ShareCriteria criteria, Pageable page) { + log.debug("find by criteria : {}, page: {}", criteria, page); + final Specification specification = createSpecification(criteria); + return shareRepository.findAll(specification, page) + .map(shareMapper::toDto); + } + + /** + * Return the number of matching entities in the database + * @param criteria The object which holds all the filters, which the entities should match. + * @return the number of matching entities. + */ + @Transactional(readOnly = true) + public long countByCriteria(ShareCriteria criteria) { + log.debug("count by criteria : {}", criteria); + final Specification specification = createSpecification(criteria); + return shareRepository.count(specification); + } + + /** + * Function to convert ShareCriteria to a {@link Specification} + */ + private Specification createSpecification(ShareCriteria criteria) { + Specification specification = Specification.where(null); + if (criteria != null) { + if (criteria.getId() != null) { + specification = specification.and(buildSpecification(criteria.getId(), Share_.id)); + } + if (criteria.getDate() != null) { + specification = specification.and(buildRangeSpecification(criteria.getDate(), Share_.date)); + } + if (criteria.getAction() != null) { + specification = specification.and(buildSpecification(criteria.getAction(), Share_.action)); + } + if (criteria.getQuantity() != null) { + specification = specification.and(buildRangeSpecification(criteria.getQuantity(), Share_.quantity)); + } + if (criteria.getComment() != null) { + specification = specification.and(buildStringSpecification(criteria.getComment(), Share_.comment)); + } + if (criteria.getMemberId() != null) { + specification = specification.and(buildSpecification(criteria.getMemberId(), + root -> root.join(Share_.member, JoinType.LEFT).get(Membership_.id))); + } + } + return specification; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/ShareService.java b/src/main/java/org/hostsharing/hsadminng/service/ShareService.java new file mode 100644 index 00000000..925deb7e --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/ShareService.java @@ -0,0 +1,84 @@ +package org.hostsharing.hsadminng.service; + +import org.hostsharing.hsadminng.domain.Share; +import org.hostsharing.hsadminng.repository.ShareRepository; +import org.hostsharing.hsadminng.service.dto.ShareDTO; +import org.hostsharing.hsadminng.service.mapper.ShareMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +/** + * Service Implementation for managing Share. + */ +@Service +@Transactional +public class ShareService { + + private final Logger log = LoggerFactory.getLogger(ShareService.class); + + private final ShareRepository shareRepository; + + private final ShareMapper shareMapper; + + public ShareService(ShareRepository shareRepository, ShareMapper shareMapper) { + this.shareRepository = shareRepository; + this.shareMapper = shareMapper; + } + + /** + * Save a share. + * + * @param shareDTO the entity to save + * @return the persisted entity + */ + public ShareDTO save(ShareDTO shareDTO) { + log.debug("Request to save Share : {}", shareDTO); + Share share = shareMapper.toEntity(shareDTO); + share = shareRepository.save(share); + return shareMapper.toDto(share); + } + + /** + * Get all the shares. + * + * @param pageable the pagination information + * @return the list of entities + */ + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + log.debug("Request to get all Shares"); + return shareRepository.findAll(pageable) + .map(shareMapper::toDto); + } + + + /** + * Get one share by id. + * + * @param id the id of the entity + * @return the entity + */ + @Transactional(readOnly = true) + public Optional findOne(Long id) { + log.debug("Request to get Share : {}", id); + return shareRepository.findById(id) + .map(shareMapper::toDto); + } + + /** + * Delete the share by id. + * + * @param id the id of the entity + */ + public void delete(Long id) { + log.debug("Request to delete Share : {}", id); + shareRepository.deleteById(id); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/AssetCriteria.java b/src/main/java/org/hostsharing/hsadminng/service/dto/AssetCriteria.java new file mode 100644 index 00000000..c9898fb9 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/AssetCriteria.java @@ -0,0 +1,136 @@ +package org.hostsharing.hsadminng.service.dto; + +import java.io.Serializable; +import java.util.Objects; +import org.hostsharing.hsadminng.domain.enumeration.AssetAction; +import io.github.jhipster.service.filter.BooleanFilter; +import io.github.jhipster.service.filter.DoubleFilter; +import io.github.jhipster.service.filter.Filter; +import io.github.jhipster.service.filter.FloatFilter; +import io.github.jhipster.service.filter.IntegerFilter; +import io.github.jhipster.service.filter.LongFilter; +import io.github.jhipster.service.filter.StringFilter; +import io.github.jhipster.service.filter.BigDecimalFilter; +import io.github.jhipster.service.filter.LocalDateFilter; + +/** + * Criteria class for the Asset entity. This class is used in AssetResource to + * receive all the possible filtering options from the Http GET request parameters. + * For example the following could be a valid requests: + * /assets?id.greaterThan=5&attr1.contains=something&attr2.specified=false + * As Spring is unable to properly convert the types, unless specific {@link Filter} class are used, we need to use + * fix type specific filters. + */ +public class AssetCriteria implements Serializable { + /** + * Class for filtering AssetAction + */ + public static class AssetActionFilter extends Filter { + } + + private static final long serialVersionUID = 1L; + + private LongFilter id; + + private LocalDateFilter date; + + private AssetActionFilter action; + + private BigDecimalFilter amount; + + private StringFilter comment; + + private LongFilter memberId; + + public LongFilter getId() { + return id; + } + + public void setId(LongFilter id) { + this.id = id; + } + + public LocalDateFilter getDate() { + return date; + } + + public void setDate(LocalDateFilter date) { + this.date = date; + } + + public AssetActionFilter getAction() { + return action; + } + + public void setAction(AssetActionFilter action) { + this.action = action; + } + + public BigDecimalFilter getAmount() { + return amount; + } + + public void setAmount(BigDecimalFilter amount) { + this.amount = amount; + } + + public StringFilter getComment() { + return comment; + } + + public void setComment(StringFilter comment) { + this.comment = comment; + } + + public LongFilter getMemberId() { + return memberId; + } + + public void setMemberId(LongFilter memberId) { + this.memberId = memberId; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final AssetCriteria that = (AssetCriteria) o; + return + Objects.equals(id, that.id) && + Objects.equals(date, that.date) && + Objects.equals(action, that.action) && + Objects.equals(amount, that.amount) && + Objects.equals(comment, that.comment) && + Objects.equals(memberId, that.memberId); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + date, + action, + amount, + comment, + memberId + ); + } + + @Override + public String toString() { + return "AssetCriteria{" + + (id != null ? "id=" + id + ", " : "") + + (date != null ? "date=" + date + ", " : "") + + (action != null ? "action=" + action + ", " : "") + + (amount != null ? "amount=" + amount + ", " : "") + + (comment != null ? "comment=" + comment + ", " : "") + + (memberId != null ? "memberId=" + memberId + ", " : "") + + "}"; + } + +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/AssetDTO.java b/src/main/java/org/hostsharing/hsadminng/service/dto/AssetDTO.java new file mode 100644 index 00000000..9897321a --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/AssetDTO.java @@ -0,0 +1,111 @@ +package org.hostsharing.hsadminng.service.dto; +import java.time.LocalDate; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Objects; +import org.hostsharing.hsadminng.domain.enumeration.AssetAction; + +/** + * A DTO for the Asset entity. + */ +public class AssetDTO implements Serializable { + + private Long id; + + @NotNull + private LocalDate date; + + @NotNull + private AssetAction action; + + @NotNull + private BigDecimal amount; + + @Size(max = 160) + private String comment; + + + private Long memberId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public AssetAction getAction() { + return action; + } + + public void setAction(AssetAction action) { + this.action = action; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public Long getMemberId() { + return memberId; + } + + public void setMemberId(Long membershipId) { + this.memberId = membershipId; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + AssetDTO assetDTO = (AssetDTO) o; + if (assetDTO.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), assetDTO.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "AssetDTO{" + + "id=" + getId() + + ", date='" + getDate() + "'" + + ", action='" + getAction() + "'" + + ", amount=" + getAmount() + + ", comment='" + getComment() + "'" + + ", member=" + getMemberId() + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/ContactCriteria.java b/src/main/java/org/hostsharing/hsadminng/service/dto/ContactCriteria.java new file mode 100644 index 00000000..1fe3cbee --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/ContactCriteria.java @@ -0,0 +1,115 @@ +package org.hostsharing.hsadminng.service.dto; + +import java.io.Serializable; +import java.util.Objects; +import io.github.jhipster.service.filter.BooleanFilter; +import io.github.jhipster.service.filter.DoubleFilter; +import io.github.jhipster.service.filter.Filter; +import io.github.jhipster.service.filter.FloatFilter; +import io.github.jhipster.service.filter.IntegerFilter; +import io.github.jhipster.service.filter.LongFilter; +import io.github.jhipster.service.filter.StringFilter; + +/** + * Criteria class for the Contact entity. This class is used in ContactResource to + * receive all the possible filtering options from the Http GET request parameters. + * For example the following could be a valid requests: + * /contacts?id.greaterThan=5&attr1.contains=something&attr2.specified=false + * As Spring is unable to properly convert the types, unless specific {@link Filter} class are used, we need to use + * fix type specific filters. + */ +public class ContactCriteria implements Serializable { + + private static final long serialVersionUID = 1L; + + private LongFilter id; + + private StringFilter firstName; + + private StringFilter lastName; + + private StringFilter email; + + private LongFilter roleId; + + public LongFilter getId() { + return id; + } + + public void setId(LongFilter id) { + this.id = id; + } + + public StringFilter getFirstName() { + return firstName; + } + + public void setFirstName(StringFilter firstName) { + this.firstName = firstName; + } + + public StringFilter getLastName() { + return lastName; + } + + public void setLastName(StringFilter lastName) { + this.lastName = lastName; + } + + public StringFilter getEmail() { + return email; + } + + public void setEmail(StringFilter email) { + this.email = email; + } + + public LongFilter getRoleId() { + return roleId; + } + + public void setRoleId(LongFilter roleId) { + this.roleId = roleId; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final ContactCriteria that = (ContactCriteria) o; + return + Objects.equals(id, that.id) && + Objects.equals(firstName, that.firstName) && + Objects.equals(lastName, that.lastName) && + Objects.equals(email, that.email) && + Objects.equals(roleId, that.roleId); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + firstName, + lastName, + email, + roleId + ); + } + + @Override + public String toString() { + return "ContactCriteria{" + + (id != null ? "id=" + id + ", " : "") + + (firstName != null ? "firstName=" + firstName + ", " : "") + + (lastName != null ? "lastName=" + lastName + ", " : "") + + (email != null ? "email=" + email + ", " : "") + + (roleId != null ? "roleId=" + roleId + ", " : "") + + "}"; + } + +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/ContactDTO.java b/src/main/java/org/hostsharing/hsadminng/service/dto/ContactDTO.java new file mode 100644 index 00000000..c5a7ba0d --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/ContactDTO.java @@ -0,0 +1,88 @@ +package org.hostsharing.hsadminng.service.dto; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.util.Objects; + +/** + * A DTO for the Contact entity. + */ +public class ContactDTO implements Serializable { + + private Long id; + + @NotNull + @Size(max = 80) + private String firstName; + + @NotNull + @Size(max = 80) + private String lastName; + + @NotNull + @Size(max = 80) + private String email; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + ContactDTO contactDTO = (ContactDTO) o; + if (contactDTO.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), contactDTO.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "ContactDTO{" + + "id=" + getId() + + ", firstName='" + getFirstName() + "'" + + ", lastName='" + getLastName() + "'" + + ", email='" + getEmail() + "'" + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerContactCriteria.java b/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerContactCriteria.java new file mode 100644 index 00000000..d4173724 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerContactCriteria.java @@ -0,0 +1,108 @@ +package org.hostsharing.hsadminng.service.dto; + +import java.io.Serializable; +import java.util.Objects; +import org.hostsharing.hsadminng.domain.enumeration.CustomerContactRole; +import io.github.jhipster.service.filter.BooleanFilter; +import io.github.jhipster.service.filter.DoubleFilter; +import io.github.jhipster.service.filter.Filter; +import io.github.jhipster.service.filter.FloatFilter; +import io.github.jhipster.service.filter.IntegerFilter; +import io.github.jhipster.service.filter.LongFilter; +import io.github.jhipster.service.filter.StringFilter; + +/** + * Criteria class for the CustomerContact entity. This class is used in CustomerContactResource to + * receive all the possible filtering options from the Http GET request parameters. + * For example the following could be a valid requests: + * /customer-contacts?id.greaterThan=5&attr1.contains=something&attr2.specified=false + * As Spring is unable to properly convert the types, unless specific {@link Filter} class are used, we need to use + * fix type specific filters. + */ +public class CustomerContactCriteria implements Serializable { + /** + * Class for filtering CustomerContactRole + */ + public static class CustomerContactRoleFilter extends Filter { + } + + private static final long serialVersionUID = 1L; + + private LongFilter id; + + private CustomerContactRoleFilter role; + + private LongFilter contactId; + + private LongFilter customerId; + + public LongFilter getId() { + return id; + } + + public void setId(LongFilter id) { + this.id = id; + } + + public CustomerContactRoleFilter getRole() { + return role; + } + + public void setRole(CustomerContactRoleFilter role) { + this.role = role; + } + + public LongFilter getContactId() { + return contactId; + } + + public void setContactId(LongFilter contactId) { + this.contactId = contactId; + } + + public LongFilter getCustomerId() { + return customerId; + } + + public void setCustomerId(LongFilter customerId) { + this.customerId = customerId; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final CustomerContactCriteria that = (CustomerContactCriteria) o; + return + Objects.equals(id, that.id) && + Objects.equals(role, that.role) && + Objects.equals(contactId, that.contactId) && + Objects.equals(customerId, that.customerId); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + role, + contactId, + customerId + ); + } + + @Override + public String toString() { + return "CustomerContactCriteria{" + + (id != null ? "id=" + id + ", " : "") + + (role != null ? "role=" + role + ", " : "") + + (contactId != null ? "contactId=" + contactId + ", " : "") + + (customerId != null ? "customerId=" + customerId + ", " : "") + + "}"; + } + +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerContactDTO.java b/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerContactDTO.java new file mode 100644 index 00000000..97fa8f8b --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerContactDTO.java @@ -0,0 +1,106 @@ +package org.hostsharing.hsadminng.service.dto; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.util.Objects; +import org.hostsharing.hsadminng.domain.enumeration.CustomerContactRole; + +/** + * A DTO for the CustomerContact entity. + */ +public class CustomerContactDTO implements Serializable { + + private Long id; + + @NotNull + private CustomerContactRole role; + + + private Long contactId; + + private String contactEmail; + + private Long customerId; + + private String customerPrefix; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public CustomerContactRole getRole() { + return role; + } + + public void setRole(CustomerContactRole role) { + this.role = role; + } + + public Long getContactId() { + return contactId; + } + + public void setContactId(Long contactId) { + this.contactId = contactId; + } + + public String getContactEmail() { + return contactEmail; + } + + public void setContactEmail(String contactEmail) { + this.contactEmail = contactEmail; + } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public String getCustomerPrefix() { + return customerPrefix; + } + + public void setCustomerPrefix(String customerPrefix) { + this.customerPrefix = customerPrefix; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + CustomerContactDTO customerContactDTO = (CustomerContactDTO) o; + if (customerContactDTO.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), customerContactDTO.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "CustomerContactDTO{" + + "id=" + getId() + + ", role='" + getRole() + "'" + + ", contact=" + getContactId() + + ", contact='" + getContactEmail() + "'" + + ", customer=" + getCustomerId() + + ", customer='" + getCustomerPrefix() + "'" + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerCriteria.java b/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerCriteria.java new file mode 100644 index 00000000..eedf5349 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerCriteria.java @@ -0,0 +1,115 @@ +package org.hostsharing.hsadminng.service.dto; + +import java.io.Serializable; +import java.util.Objects; +import io.github.jhipster.service.filter.BooleanFilter; +import io.github.jhipster.service.filter.DoubleFilter; +import io.github.jhipster.service.filter.Filter; +import io.github.jhipster.service.filter.FloatFilter; +import io.github.jhipster.service.filter.IntegerFilter; +import io.github.jhipster.service.filter.LongFilter; +import io.github.jhipster.service.filter.StringFilter; + +/** + * Criteria class for the Customer entity. This class is used in CustomerResource to + * receive all the possible filtering options from the Http GET request parameters. + * For example the following could be a valid requests: + * /customers?id.greaterThan=5&attr1.contains=something&attr2.specified=false + * As Spring is unable to properly convert the types, unless specific {@link Filter} class are used, we need to use + * fix type specific filters. + */ +public class CustomerCriteria implements Serializable { + + private static final long serialVersionUID = 1L; + + private LongFilter id; + + private IntegerFilter number; + + private StringFilter prefix; + + private LongFilter membershipId; + + private LongFilter roleId; + + public LongFilter getId() { + return id; + } + + public void setId(LongFilter id) { + this.id = id; + } + + public IntegerFilter getNumber() { + return number; + } + + public void setNumber(IntegerFilter number) { + this.number = number; + } + + public StringFilter getPrefix() { + return prefix; + } + + public void setPrefix(StringFilter prefix) { + this.prefix = prefix; + } + + public LongFilter getMembershipId() { + return membershipId; + } + + public void setMembershipId(LongFilter membershipId) { + this.membershipId = membershipId; + } + + public LongFilter getRoleId() { + return roleId; + } + + public void setRoleId(LongFilter roleId) { + this.roleId = roleId; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final CustomerCriteria that = (CustomerCriteria) o; + return + Objects.equals(id, that.id) && + Objects.equals(number, that.number) && + Objects.equals(prefix, that.prefix) && + Objects.equals(membershipId, that.membershipId) && + Objects.equals(roleId, that.roleId); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + number, + prefix, + membershipId, + roleId + ); + } + + @Override + public String toString() { + return "CustomerCriteria{" + + (id != null ? "id=" + id + ", " : "") + + (number != null ? "number=" + number + ", " : "") + + (prefix != null ? "prefix=" + prefix + ", " : "") + + (membershipId != null ? "membershipId=" + membershipId + ", " : "") + + (roleId != null ? "roleId=" + roleId + ", " : "") + + "}"; + } + +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerDTO.java b/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerDTO.java new file mode 100644 index 00000000..ec8d0e14 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/CustomerDTO.java @@ -0,0 +1,76 @@ +package org.hostsharing.hsadminng.service.dto; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.util.Objects; + +/** + * A DTO for the Customer entity. + */ +public class CustomerDTO implements Serializable { + + private Long id; + + @NotNull + @Min(value = 10000) + @Max(value = 99999) + private Integer number; + + @NotNull + @Pattern(regexp = "[a-z][a-z0-9]+") + private String prefix; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Integer getNumber() { + return number; + } + + public void setNumber(Integer number) { + this.number = number; + } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + CustomerDTO customerDTO = (CustomerDTO) o; + if (customerDTO.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), customerDTO.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "CustomerDTO{" + + "id=" + getId() + + ", number=" + getNumber() + + ", prefix='" + getPrefix() + "'" + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/MembershipCriteria.java b/src/main/java/org/hostsharing/hsadminng/service/dto/MembershipCriteria.java new file mode 100644 index 00000000..6e8e7b45 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/MembershipCriteria.java @@ -0,0 +1,129 @@ +package org.hostsharing.hsadminng.service.dto; + +import java.io.Serializable; +import java.util.Objects; +import io.github.jhipster.service.filter.BooleanFilter; +import io.github.jhipster.service.filter.DoubleFilter; +import io.github.jhipster.service.filter.Filter; +import io.github.jhipster.service.filter.FloatFilter; +import io.github.jhipster.service.filter.IntegerFilter; +import io.github.jhipster.service.filter.LongFilter; +import io.github.jhipster.service.filter.StringFilter; +import io.github.jhipster.service.filter.LocalDateFilter; + +/** + * Criteria class for the Membership entity. This class is used in MembershipResource to + * receive all the possible filtering options from the Http GET request parameters. + * For example the following could be a valid requests: + * /memberships?id.greaterThan=5&attr1.contains=something&attr2.specified=false + * As Spring is unable to properly convert the types, unless specific {@link Filter} class are used, we need to use + * fix type specific filters. + */ +public class MembershipCriteria implements Serializable { + + private static final long serialVersionUID = 1L; + + private LongFilter id; + + private LocalDateFilter sinceDate; + + private LocalDateFilter untilDate; + + private LongFilter shareId; + + private LongFilter assetId; + + private LongFilter customerId; + + public LongFilter getId() { + return id; + } + + public void setId(LongFilter id) { + this.id = id; + } + + public LocalDateFilter getSinceDate() { + return sinceDate; + } + + public void setSinceDate(LocalDateFilter sinceDate) { + this.sinceDate = sinceDate; + } + + public LocalDateFilter getUntilDate() { + return untilDate; + } + + public void setUntilDate(LocalDateFilter untilDate) { + this.untilDate = untilDate; + } + + public LongFilter getShareId() { + return shareId; + } + + public void setShareId(LongFilter shareId) { + this.shareId = shareId; + } + + public LongFilter getAssetId() { + return assetId; + } + + public void setAssetId(LongFilter assetId) { + this.assetId = assetId; + } + + public LongFilter getCustomerId() { + return customerId; + } + + public void setCustomerId(LongFilter customerId) { + this.customerId = customerId; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final MembershipCriteria that = (MembershipCriteria) o; + return + Objects.equals(id, that.id) && + Objects.equals(sinceDate, that.sinceDate) && + Objects.equals(untilDate, that.untilDate) && + Objects.equals(shareId, that.shareId) && + Objects.equals(assetId, that.assetId) && + Objects.equals(customerId, that.customerId); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + sinceDate, + untilDate, + shareId, + assetId, + customerId + ); + } + + @Override + public String toString() { + return "MembershipCriteria{" + + (id != null ? "id=" + id + ", " : "") + + (sinceDate != null ? "sinceDate=" + sinceDate + ", " : "") + + (untilDate != null ? "untilDate=" + untilDate + ", " : "") + + (shareId != null ? "shareId=" + shareId + ", " : "") + + (assetId != null ? "assetId=" + assetId + ", " : "") + + (customerId != null ? "customerId=" + customerId + ", " : "") + + "}"; + } + +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/MembershipDTO.java b/src/main/java/org/hostsharing/hsadminng/service/dto/MembershipDTO.java new file mode 100644 index 00000000..12232fed --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/MembershipDTO.java @@ -0,0 +1,95 @@ +package org.hostsharing.hsadminng.service.dto; +import java.time.LocalDate; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.util.Objects; + +/** + * A DTO for the Membership entity. + */ +public class MembershipDTO implements Serializable { + + private Long id; + + @NotNull + private LocalDate sinceDate; + + private LocalDate untilDate; + + + private Long customerId; + + private String customerPrefix; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public LocalDate getSinceDate() { + return sinceDate; + } + + public void setSinceDate(LocalDate sinceDate) { + this.sinceDate = sinceDate; + } + + public LocalDate getUntilDate() { + return untilDate; + } + + public void setUntilDate(LocalDate untilDate) { + this.untilDate = untilDate; + } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public String getCustomerPrefix() { + return customerPrefix; + } + + public void setCustomerPrefix(String customerPrefix) { + this.customerPrefix = customerPrefix; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + MembershipDTO membershipDTO = (MembershipDTO) o; + if (membershipDTO.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), membershipDTO.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "MembershipDTO{" + + "id=" + getId() + + ", sinceDate='" + getSinceDate() + "'" + + ", untilDate='" + getUntilDate() + "'" + + ", customer=" + getCustomerId() + + ", customer='" + getCustomerPrefix() + "'" + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/ShareCriteria.java b/src/main/java/org/hostsharing/hsadminng/service/dto/ShareCriteria.java new file mode 100644 index 00000000..1db1aff5 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/ShareCriteria.java @@ -0,0 +1,135 @@ +package org.hostsharing.hsadminng.service.dto; + +import java.io.Serializable; +import java.util.Objects; +import org.hostsharing.hsadminng.domain.enumeration.ShareAction; +import io.github.jhipster.service.filter.BooleanFilter; +import io.github.jhipster.service.filter.DoubleFilter; +import io.github.jhipster.service.filter.Filter; +import io.github.jhipster.service.filter.FloatFilter; +import io.github.jhipster.service.filter.IntegerFilter; +import io.github.jhipster.service.filter.LongFilter; +import io.github.jhipster.service.filter.StringFilter; +import io.github.jhipster.service.filter.LocalDateFilter; + +/** + * Criteria class for the Share entity. This class is used in ShareResource to + * receive all the possible filtering options from the Http GET request parameters. + * For example the following could be a valid requests: + * /shares?id.greaterThan=5&attr1.contains=something&attr2.specified=false + * As Spring is unable to properly convert the types, unless specific {@link Filter} class are used, we need to use + * fix type specific filters. + */ +public class ShareCriteria implements Serializable { + /** + * Class for filtering ShareAction + */ + public static class ShareActionFilter extends Filter { + } + + private static final long serialVersionUID = 1L; + + private LongFilter id; + + private LocalDateFilter date; + + private ShareActionFilter action; + + private IntegerFilter quantity; + + private StringFilter comment; + + private LongFilter memberId; + + public LongFilter getId() { + return id; + } + + public void setId(LongFilter id) { + this.id = id; + } + + public LocalDateFilter getDate() { + return date; + } + + public void setDate(LocalDateFilter date) { + this.date = date; + } + + public ShareActionFilter getAction() { + return action; + } + + public void setAction(ShareActionFilter action) { + this.action = action; + } + + public IntegerFilter getQuantity() { + return quantity; + } + + public void setQuantity(IntegerFilter quantity) { + this.quantity = quantity; + } + + public StringFilter getComment() { + return comment; + } + + public void setComment(StringFilter comment) { + this.comment = comment; + } + + public LongFilter getMemberId() { + return memberId; + } + + public void setMemberId(LongFilter memberId) { + this.memberId = memberId; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final ShareCriteria that = (ShareCriteria) o; + return + Objects.equals(id, that.id) && + Objects.equals(date, that.date) && + Objects.equals(action, that.action) && + Objects.equals(quantity, that.quantity) && + Objects.equals(comment, that.comment) && + Objects.equals(memberId, that.memberId); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + date, + action, + quantity, + comment, + memberId + ); + } + + @Override + public String toString() { + return "ShareCriteria{" + + (id != null ? "id=" + id + ", " : "") + + (date != null ? "date=" + date + ", " : "") + + (action != null ? "action=" + action + ", " : "") + + (quantity != null ? "quantity=" + quantity + ", " : "") + + (comment != null ? "comment=" + comment + ", " : "") + + (memberId != null ? "memberId=" + memberId + ", " : "") + + "}"; + } + +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/dto/ShareDTO.java b/src/main/java/org/hostsharing/hsadminng/service/dto/ShareDTO.java new file mode 100644 index 00000000..1ae37049 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/dto/ShareDTO.java @@ -0,0 +1,110 @@ +package org.hostsharing.hsadminng.service.dto; +import java.time.LocalDate; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.util.Objects; +import org.hostsharing.hsadminng.domain.enumeration.ShareAction; + +/** + * A DTO for the Share entity. + */ +public class ShareDTO implements Serializable { + + private Long id; + + @NotNull + private LocalDate date; + + @NotNull + private ShareAction action; + + @NotNull + private Integer quantity; + + @Size(max = 160) + private String comment; + + + private Long memberId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public ShareAction getAction() { + return action; + } + + public void setAction(ShareAction action) { + this.action = action; + } + + public Integer getQuantity() { + return quantity; + } + + public void setQuantity(Integer quantity) { + this.quantity = quantity; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public Long getMemberId() { + return memberId; + } + + public void setMemberId(Long membershipId) { + this.memberId = membershipId; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + ShareDTO shareDTO = (ShareDTO) o; + if (shareDTO.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), shareDTO.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "ShareDTO{" + + "id=" + getId() + + ", date='" + getDate() + "'" + + ", action='" + getAction() + "'" + + ", quantity=" + getQuantity() + + ", comment='" + getComment() + "'" + + ", member=" + getMemberId() + + "}"; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/mapper/AssetMapper.java b/src/main/java/org/hostsharing/hsadminng/service/mapper/AssetMapper.java new file mode 100644 index 00000000..5d39692e --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/mapper/AssetMapper.java @@ -0,0 +1,28 @@ +package org.hostsharing.hsadminng.service.mapper; + +import org.hostsharing.hsadminng.domain.*; +import org.hostsharing.hsadminng.service.dto.AssetDTO; + +import org.mapstruct.*; + +/** + * Mapper for the entity Asset and its DTO AssetDTO. + */ +@Mapper(componentModel = "spring", uses = {MembershipMapper.class}) +public interface AssetMapper extends EntityMapper { + + @Mapping(source = "member.id", target = "memberId") + AssetDTO toDto(Asset asset); + + @Mapping(source = "memberId", target = "member") + Asset toEntity(AssetDTO assetDTO); + + default Asset fromId(Long id) { + if (id == null) { + return null; + } + Asset asset = new Asset(); + asset.setId(id); + return asset; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/mapper/ContactMapper.java b/src/main/java/org/hostsharing/hsadminng/service/mapper/ContactMapper.java new file mode 100644 index 00000000..26974051 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/mapper/ContactMapper.java @@ -0,0 +1,26 @@ +package org.hostsharing.hsadminng.service.mapper; + +import org.hostsharing.hsadminng.domain.*; +import org.hostsharing.hsadminng.service.dto.ContactDTO; + +import org.mapstruct.*; + +/** + * Mapper for the entity Contact and its DTO ContactDTO. + */ +@Mapper(componentModel = "spring", uses = {}) +public interface ContactMapper extends EntityMapper { + + + @Mapping(target = "roles", ignore = true) + Contact toEntity(ContactDTO contactDTO); + + default Contact fromId(Long id) { + if (id == null) { + return null; + } + Contact contact = new Contact(); + contact.setId(id); + return contact; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/mapper/CustomerContactMapper.java b/src/main/java/org/hostsharing/hsadminng/service/mapper/CustomerContactMapper.java new file mode 100644 index 00000000..3e4671e2 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/mapper/CustomerContactMapper.java @@ -0,0 +1,32 @@ +package org.hostsharing.hsadminng.service.mapper; + +import org.hostsharing.hsadminng.domain.*; +import org.hostsharing.hsadminng.service.dto.CustomerContactDTO; + +import org.mapstruct.*; + +/** + * Mapper for the entity CustomerContact and its DTO CustomerContactDTO. + */ +@Mapper(componentModel = "spring", uses = {ContactMapper.class, CustomerMapper.class}) +public interface CustomerContactMapper extends EntityMapper { + + @Mapping(source = "contact.id", target = "contactId") + @Mapping(source = "contact.email", target = "contactEmail") + @Mapping(source = "customer.id", target = "customerId") + @Mapping(source = "customer.prefix", target = "customerPrefix") + CustomerContactDTO toDto(CustomerContact customerContact); + + @Mapping(source = "contactId", target = "contact") + @Mapping(source = "customerId", target = "customer") + CustomerContact toEntity(CustomerContactDTO customerContactDTO); + + default CustomerContact fromId(Long id) { + if (id == null) { + return null; + } + CustomerContact customerContact = new CustomerContact(); + customerContact.setId(id); + return customerContact; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/mapper/CustomerMapper.java b/src/main/java/org/hostsharing/hsadminng/service/mapper/CustomerMapper.java new file mode 100644 index 00000000..35da6964 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/mapper/CustomerMapper.java @@ -0,0 +1,27 @@ +package org.hostsharing.hsadminng.service.mapper; + +import org.hostsharing.hsadminng.domain.*; +import org.hostsharing.hsadminng.service.dto.CustomerDTO; + +import org.mapstruct.*; + +/** + * Mapper for the entity Customer and its DTO CustomerDTO. + */ +@Mapper(componentModel = "spring", uses = {}) +public interface CustomerMapper extends EntityMapper { + + + @Mapping(target = "memberships", ignore = true) + @Mapping(target = "roles", ignore = true) + Customer toEntity(CustomerDTO customerDTO); + + default Customer fromId(Long id) { + if (id == null) { + return null; + } + Customer customer = new Customer(); + customer.setId(id); + return customer; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/mapper/EntityMapper.java b/src/main/java/org/hostsharing/hsadminng/service/mapper/EntityMapper.java new file mode 100644 index 00000000..65955272 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/mapper/EntityMapper.java @@ -0,0 +1,21 @@ +package org.hostsharing.hsadminng.service.mapper; + +import java.util.List; + +/** + * Contract for a generic dto to entity mapper. + * + * @param - DTO type parameter. + * @param - Entity type parameter. + */ + +public interface EntityMapper { + + E toEntity(D dto); + + D toDto(E entity); + + List toEntity(List dtoList); + + List toDto(List entityList); +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/mapper/MembershipMapper.java b/src/main/java/org/hostsharing/hsadminng/service/mapper/MembershipMapper.java new file mode 100644 index 00000000..02a45ace --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/mapper/MembershipMapper.java @@ -0,0 +1,31 @@ +package org.hostsharing.hsadminng.service.mapper; + +import org.hostsharing.hsadminng.domain.*; +import org.hostsharing.hsadminng.service.dto.MembershipDTO; + +import org.mapstruct.*; + +/** + * Mapper for the entity Membership and its DTO MembershipDTO. + */ +@Mapper(componentModel = "spring", uses = {CustomerMapper.class}) +public interface MembershipMapper extends EntityMapper { + + @Mapping(source = "customer.id", target = "customerId") + @Mapping(source = "customer.prefix", target = "customerPrefix") + MembershipDTO toDto(Membership membership); + + @Mapping(target = "shares", ignore = true) + @Mapping(target = "assets", ignore = true) + @Mapping(source = "customerId", target = "customer") + Membership toEntity(MembershipDTO membershipDTO); + + default Membership fromId(Long id) { + if (id == null) { + return null; + } + Membership membership = new Membership(); + membership.setId(id); + return membership; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/service/mapper/ShareMapper.java b/src/main/java/org/hostsharing/hsadminng/service/mapper/ShareMapper.java new file mode 100644 index 00000000..c5ed7f33 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/service/mapper/ShareMapper.java @@ -0,0 +1,28 @@ +package org.hostsharing.hsadminng.service.mapper; + +import org.hostsharing.hsadminng.domain.*; +import org.hostsharing.hsadminng.service.dto.ShareDTO; + +import org.mapstruct.*; + +/** + * Mapper for the entity Share and its DTO ShareDTO. + */ +@Mapper(componentModel = "spring", uses = {MembershipMapper.class}) +public interface ShareMapper extends EntityMapper { + + @Mapping(source = "member.id", target = "memberId") + ShareDTO toDto(Share share); + + @Mapping(source = "memberId", target = "member") + Share toEntity(ShareDTO shareDTO); + + default Share fromId(Long id) { + if (id == null) { + return null; + } + Share share = new Share(); + share.setId(id); + return share; + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/web/rest/AssetResource.java b/src/main/java/org/hostsharing/hsadminng/web/rest/AssetResource.java new file mode 100644 index 00000000..3e142f28 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/web/rest/AssetResource.java @@ -0,0 +1,138 @@ +package org.hostsharing.hsadminng.web.rest; +import org.hostsharing.hsadminng.service.AssetService; +import org.hostsharing.hsadminng.web.rest.errors.BadRequestAlertException; +import org.hostsharing.hsadminng.web.rest.util.HeaderUtil; +import org.hostsharing.hsadminng.web.rest.util.PaginationUtil; +import org.hostsharing.hsadminng.service.dto.AssetDTO; +import org.hostsharing.hsadminng.service.dto.AssetCriteria; +import org.hostsharing.hsadminng.service.AssetQueryService; +import io.github.jhipster.web.util.ResponseUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.net.URI; +import java.net.URISyntaxException; + +import java.util.List; +import java.util.Optional; + +/** + * REST controller for managing Asset. + */ +@RestController +@RequestMapping("/api") +public class AssetResource { + + private final Logger log = LoggerFactory.getLogger(AssetResource.class); + + private static final String ENTITY_NAME = "asset"; + + private final AssetService assetService; + + private final AssetQueryService assetQueryService; + + public AssetResource(AssetService assetService, AssetQueryService assetQueryService) { + this.assetService = assetService; + this.assetQueryService = assetQueryService; + } + + /** + * POST /assets : Create a new asset. + * + * @param assetDTO the assetDTO to create + * @return the ResponseEntity with status 201 (Created) and with body the new assetDTO, or with status 400 (Bad Request) if the asset has already an ID + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PostMapping("/assets") + public ResponseEntity createAsset(@Valid @RequestBody AssetDTO assetDTO) throws URISyntaxException { + log.debug("REST request to save Asset : {}", assetDTO); + if (assetDTO.getId() != null) { + throw new BadRequestAlertException("A new asset cannot already have an ID", ENTITY_NAME, "idexists"); + } + AssetDTO result = assetService.save(assetDTO); + return ResponseEntity.created(new URI("/api/assets/" + result.getId())) + .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())) + .body(result); + } + + /** + * PUT /assets : Updates an existing asset. + * + * @param assetDTO the assetDTO to update + * @return the ResponseEntity with status 200 (OK) and with body the updated assetDTO, + * or with status 400 (Bad Request) if the assetDTO is not valid, + * or with status 500 (Internal Server Error) if the assetDTO couldn't be updated + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PutMapping("/assets") + public ResponseEntity updateAsset(@Valid @RequestBody AssetDTO assetDTO) throws URISyntaxException { + log.debug("REST request to update Asset : {}", assetDTO); + if (assetDTO.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + AssetDTO result = assetService.save(assetDTO); + return ResponseEntity.ok() + .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, assetDTO.getId().toString())) + .body(result); + } + + /** + * GET /assets : get all the assets. + * + * @param pageable the pagination information + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the list of assets in body + */ + @GetMapping("/assets") + public ResponseEntity> getAllAssets(AssetCriteria criteria, Pageable pageable) { + log.debug("REST request to get Assets by criteria: {}", criteria); + Page page = assetQueryService.findByCriteria(criteria, pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/assets"); + return ResponseEntity.ok().headers(headers).body(page.getContent()); + } + + /** + * GET /assets/count : count all the assets. + * + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the count in body + */ + @GetMapping("/assets/count") + public ResponseEntity countAssets(AssetCriteria criteria) { + log.debug("REST request to count Assets by criteria: {}", criteria); + return ResponseEntity.ok().body(assetQueryService.countByCriteria(criteria)); + } + + /** + * GET /assets/:id : get the "id" asset. + * + * @param id the id of the assetDTO to retrieve + * @return the ResponseEntity with status 200 (OK) and with body the assetDTO, or with status 404 (Not Found) + */ + @GetMapping("/assets/{id}") + public ResponseEntity getAsset(@PathVariable Long id) { + log.debug("REST request to get Asset : {}", id); + Optional assetDTO = assetService.findOne(id); + return ResponseUtil.wrapOrNotFound(assetDTO); + } + + /** + * DELETE /assets/:id : delete the "id" asset. + * + * @param id the id of the assetDTO to delete + * @return the ResponseEntity with status 200 (OK) + */ + @DeleteMapping("/assets/{id}") + public ResponseEntity deleteAsset(@PathVariable Long id) { + log.debug("REST request to delete Asset : {}", id); + assetService.delete(id); + return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build(); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/web/rest/ContactResource.java b/src/main/java/org/hostsharing/hsadminng/web/rest/ContactResource.java new file mode 100644 index 00000000..df5670f7 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/web/rest/ContactResource.java @@ -0,0 +1,138 @@ +package org.hostsharing.hsadminng.web.rest; +import org.hostsharing.hsadminng.service.ContactService; +import org.hostsharing.hsadminng.web.rest.errors.BadRequestAlertException; +import org.hostsharing.hsadminng.web.rest.util.HeaderUtil; +import org.hostsharing.hsadminng.web.rest.util.PaginationUtil; +import org.hostsharing.hsadminng.service.dto.ContactDTO; +import org.hostsharing.hsadminng.service.dto.ContactCriteria; +import org.hostsharing.hsadminng.service.ContactQueryService; +import io.github.jhipster.web.util.ResponseUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.net.URI; +import java.net.URISyntaxException; + +import java.util.List; +import java.util.Optional; + +/** + * REST controller for managing Contact. + */ +@RestController +@RequestMapping("/api") +public class ContactResource { + + private final Logger log = LoggerFactory.getLogger(ContactResource.class); + + private static final String ENTITY_NAME = "contact"; + + private final ContactService contactService; + + private final ContactQueryService contactQueryService; + + public ContactResource(ContactService contactService, ContactQueryService contactQueryService) { + this.contactService = contactService; + this.contactQueryService = contactQueryService; + } + + /** + * POST /contacts : Create a new contact. + * + * @param contactDTO the contactDTO to create + * @return the ResponseEntity with status 201 (Created) and with body the new contactDTO, or with status 400 (Bad Request) if the contact has already an ID + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PostMapping("/contacts") + public ResponseEntity createContact(@Valid @RequestBody ContactDTO contactDTO) throws URISyntaxException { + log.debug("REST request to save Contact : {}", contactDTO); + if (contactDTO.getId() != null) { + throw new BadRequestAlertException("A new contact cannot already have an ID", ENTITY_NAME, "idexists"); + } + ContactDTO result = contactService.save(contactDTO); + return ResponseEntity.created(new URI("/api/contacts/" + result.getId())) + .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())) + .body(result); + } + + /** + * PUT /contacts : Updates an existing contact. + * + * @param contactDTO the contactDTO to update + * @return the ResponseEntity with status 200 (OK) and with body the updated contactDTO, + * or with status 400 (Bad Request) if the contactDTO is not valid, + * or with status 500 (Internal Server Error) if the contactDTO couldn't be updated + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PutMapping("/contacts") + public ResponseEntity updateContact(@Valid @RequestBody ContactDTO contactDTO) throws URISyntaxException { + log.debug("REST request to update Contact : {}", contactDTO); + if (contactDTO.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + ContactDTO result = contactService.save(contactDTO); + return ResponseEntity.ok() + .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, contactDTO.getId().toString())) + .body(result); + } + + /** + * GET /contacts : get all the contacts. + * + * @param pageable the pagination information + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the list of contacts in body + */ + @GetMapping("/contacts") + public ResponseEntity> getAllContacts(ContactCriteria criteria, Pageable pageable) { + log.debug("REST request to get Contacts by criteria: {}", criteria); + Page page = contactQueryService.findByCriteria(criteria, pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/contacts"); + return ResponseEntity.ok().headers(headers).body(page.getContent()); + } + + /** + * GET /contacts/count : count all the contacts. + * + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the count in body + */ + @GetMapping("/contacts/count") + public ResponseEntity countContacts(ContactCriteria criteria) { + log.debug("REST request to count Contacts by criteria: {}", criteria); + return ResponseEntity.ok().body(contactQueryService.countByCriteria(criteria)); + } + + /** + * GET /contacts/:id : get the "id" contact. + * + * @param id the id of the contactDTO to retrieve + * @return the ResponseEntity with status 200 (OK) and with body the contactDTO, or with status 404 (Not Found) + */ + @GetMapping("/contacts/{id}") + public ResponseEntity getContact(@PathVariable Long id) { + log.debug("REST request to get Contact : {}", id); + Optional contactDTO = contactService.findOne(id); + return ResponseUtil.wrapOrNotFound(contactDTO); + } + + /** + * DELETE /contacts/:id : delete the "id" contact. + * + * @param id the id of the contactDTO to delete + * @return the ResponseEntity with status 200 (OK) + */ + @DeleteMapping("/contacts/{id}") + public ResponseEntity deleteContact(@PathVariable Long id) { + log.debug("REST request to delete Contact : {}", id); + contactService.delete(id); + return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build(); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/web/rest/CustomerContactResource.java b/src/main/java/org/hostsharing/hsadminng/web/rest/CustomerContactResource.java new file mode 100644 index 00000000..5308c4a3 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/web/rest/CustomerContactResource.java @@ -0,0 +1,138 @@ +package org.hostsharing.hsadminng.web.rest; +import org.hostsharing.hsadminng.service.CustomerContactService; +import org.hostsharing.hsadminng.web.rest.errors.BadRequestAlertException; +import org.hostsharing.hsadminng.web.rest.util.HeaderUtil; +import org.hostsharing.hsadminng.web.rest.util.PaginationUtil; +import org.hostsharing.hsadminng.service.dto.CustomerContactDTO; +import org.hostsharing.hsadminng.service.dto.CustomerContactCriteria; +import org.hostsharing.hsadminng.service.CustomerContactQueryService; +import io.github.jhipster.web.util.ResponseUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.net.URI; +import java.net.URISyntaxException; + +import java.util.List; +import java.util.Optional; + +/** + * REST controller for managing CustomerContact. + */ +@RestController +@RequestMapping("/api") +public class CustomerContactResource { + + private final Logger log = LoggerFactory.getLogger(CustomerContactResource.class); + + private static final String ENTITY_NAME = "customerContact"; + + private final CustomerContactService customerContactService; + + private final CustomerContactQueryService customerContactQueryService; + + public CustomerContactResource(CustomerContactService customerContactService, CustomerContactQueryService customerContactQueryService) { + this.customerContactService = customerContactService; + this.customerContactQueryService = customerContactQueryService; + } + + /** + * POST /customer-contacts : Create a new customerContact. + * + * @param customerContactDTO the customerContactDTO to create + * @return the ResponseEntity with status 201 (Created) and with body the new customerContactDTO, or with status 400 (Bad Request) if the customerContact has already an ID + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PostMapping("/customer-contacts") + public ResponseEntity createCustomerContact(@Valid @RequestBody CustomerContactDTO customerContactDTO) throws URISyntaxException { + log.debug("REST request to save CustomerContact : {}", customerContactDTO); + if (customerContactDTO.getId() != null) { + throw new BadRequestAlertException("A new customerContact cannot already have an ID", ENTITY_NAME, "idexists"); + } + CustomerContactDTO result = customerContactService.save(customerContactDTO); + return ResponseEntity.created(new URI("/api/customer-contacts/" + result.getId())) + .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())) + .body(result); + } + + /** + * PUT /customer-contacts : Updates an existing customerContact. + * + * @param customerContactDTO the customerContactDTO to update + * @return the ResponseEntity with status 200 (OK) and with body the updated customerContactDTO, + * or with status 400 (Bad Request) if the customerContactDTO is not valid, + * or with status 500 (Internal Server Error) if the customerContactDTO couldn't be updated + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PutMapping("/customer-contacts") + public ResponseEntity updateCustomerContact(@Valid @RequestBody CustomerContactDTO customerContactDTO) throws URISyntaxException { + log.debug("REST request to update CustomerContact : {}", customerContactDTO); + if (customerContactDTO.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + CustomerContactDTO result = customerContactService.save(customerContactDTO); + return ResponseEntity.ok() + .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, customerContactDTO.getId().toString())) + .body(result); + } + + /** + * GET /customer-contacts : get all the customerContacts. + * + * @param pageable the pagination information + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the list of customerContacts in body + */ + @GetMapping("/customer-contacts") + public ResponseEntity> getAllCustomerContacts(CustomerContactCriteria criteria, Pageable pageable) { + log.debug("REST request to get CustomerContacts by criteria: {}", criteria); + Page page = customerContactQueryService.findByCriteria(criteria, pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/customer-contacts"); + return ResponseEntity.ok().headers(headers).body(page.getContent()); + } + + /** + * GET /customer-contacts/count : count all the customerContacts. + * + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the count in body + */ + @GetMapping("/customer-contacts/count") + public ResponseEntity countCustomerContacts(CustomerContactCriteria criteria) { + log.debug("REST request to count CustomerContacts by criteria: {}", criteria); + return ResponseEntity.ok().body(customerContactQueryService.countByCriteria(criteria)); + } + + /** + * GET /customer-contacts/:id : get the "id" customerContact. + * + * @param id the id of the customerContactDTO to retrieve + * @return the ResponseEntity with status 200 (OK) and with body the customerContactDTO, or with status 404 (Not Found) + */ + @GetMapping("/customer-contacts/{id}") + public ResponseEntity getCustomerContact(@PathVariable Long id) { + log.debug("REST request to get CustomerContact : {}", id); + Optional customerContactDTO = customerContactService.findOne(id); + return ResponseUtil.wrapOrNotFound(customerContactDTO); + } + + /** + * DELETE /customer-contacts/:id : delete the "id" customerContact. + * + * @param id the id of the customerContactDTO to delete + * @return the ResponseEntity with status 200 (OK) + */ + @DeleteMapping("/customer-contacts/{id}") + public ResponseEntity deleteCustomerContact(@PathVariable Long id) { + log.debug("REST request to delete CustomerContact : {}", id); + customerContactService.delete(id); + return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build(); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/web/rest/CustomerResource.java b/src/main/java/org/hostsharing/hsadminng/web/rest/CustomerResource.java new file mode 100644 index 00000000..aa5e3710 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/web/rest/CustomerResource.java @@ -0,0 +1,138 @@ +package org.hostsharing.hsadminng.web.rest; +import org.hostsharing.hsadminng.service.CustomerService; +import org.hostsharing.hsadminng.web.rest.errors.BadRequestAlertException; +import org.hostsharing.hsadminng.web.rest.util.HeaderUtil; +import org.hostsharing.hsadminng.web.rest.util.PaginationUtil; +import org.hostsharing.hsadminng.service.dto.CustomerDTO; +import org.hostsharing.hsadminng.service.dto.CustomerCriteria; +import org.hostsharing.hsadminng.service.CustomerQueryService; +import io.github.jhipster.web.util.ResponseUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.net.URI; +import java.net.URISyntaxException; + +import java.util.List; +import java.util.Optional; + +/** + * REST controller for managing Customer. + */ +@RestController +@RequestMapping("/api") +public class CustomerResource { + + private final Logger log = LoggerFactory.getLogger(CustomerResource.class); + + private static final String ENTITY_NAME = "customer"; + + private final CustomerService customerService; + + private final CustomerQueryService customerQueryService; + + public CustomerResource(CustomerService customerService, CustomerQueryService customerQueryService) { + this.customerService = customerService; + this.customerQueryService = customerQueryService; + } + + /** + * POST /customers : Create a new customer. + * + * @param customerDTO the customerDTO to create + * @return the ResponseEntity with status 201 (Created) and with body the new customerDTO, or with status 400 (Bad Request) if the customer has already an ID + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PostMapping("/customers") + public ResponseEntity createCustomer(@Valid @RequestBody CustomerDTO customerDTO) throws URISyntaxException { + log.debug("REST request to save Customer : {}", customerDTO); + if (customerDTO.getId() != null) { + throw new BadRequestAlertException("A new customer cannot already have an ID", ENTITY_NAME, "idexists"); + } + CustomerDTO result = customerService.save(customerDTO); + return ResponseEntity.created(new URI("/api/customers/" + result.getId())) + .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())) + .body(result); + } + + /** + * PUT /customers : Updates an existing customer. + * + * @param customerDTO the customerDTO to update + * @return the ResponseEntity with status 200 (OK) and with body the updated customerDTO, + * or with status 400 (Bad Request) if the customerDTO is not valid, + * or with status 500 (Internal Server Error) if the customerDTO couldn't be updated + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PutMapping("/customers") + public ResponseEntity updateCustomer(@Valid @RequestBody CustomerDTO customerDTO) throws URISyntaxException { + log.debug("REST request to update Customer : {}", customerDTO); + if (customerDTO.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + CustomerDTO result = customerService.save(customerDTO); + return ResponseEntity.ok() + .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, customerDTO.getId().toString())) + .body(result); + } + + /** + * GET /customers : get all the customers. + * + * @param pageable the pagination information + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the list of customers in body + */ + @GetMapping("/customers") + public ResponseEntity> getAllCustomers(CustomerCriteria criteria, Pageable pageable) { + log.debug("REST request to get Customers by criteria: {}", criteria); + Page page = customerQueryService.findByCriteria(criteria, pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/customers"); + return ResponseEntity.ok().headers(headers).body(page.getContent()); + } + + /** + * GET /customers/count : count all the customers. + * + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the count in body + */ + @GetMapping("/customers/count") + public ResponseEntity countCustomers(CustomerCriteria criteria) { + log.debug("REST request to count Customers by criteria: {}", criteria); + return ResponseEntity.ok().body(customerQueryService.countByCriteria(criteria)); + } + + /** + * GET /customers/:id : get the "id" customer. + * + * @param id the id of the customerDTO to retrieve + * @return the ResponseEntity with status 200 (OK) and with body the customerDTO, or with status 404 (Not Found) + */ + @GetMapping("/customers/{id}") + public ResponseEntity getCustomer(@PathVariable Long id) { + log.debug("REST request to get Customer : {}", id); + Optional customerDTO = customerService.findOne(id); + return ResponseUtil.wrapOrNotFound(customerDTO); + } + + /** + * DELETE /customers/:id : delete the "id" customer. + * + * @param id the id of the customerDTO to delete + * @return the ResponseEntity with status 200 (OK) + */ + @DeleteMapping("/customers/{id}") + public ResponseEntity deleteCustomer(@PathVariable Long id) { + log.debug("REST request to delete Customer : {}", id); + customerService.delete(id); + return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build(); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/web/rest/MembershipResource.java b/src/main/java/org/hostsharing/hsadminng/web/rest/MembershipResource.java new file mode 100644 index 00000000..befa075f --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/web/rest/MembershipResource.java @@ -0,0 +1,138 @@ +package org.hostsharing.hsadminng.web.rest; +import org.hostsharing.hsadminng.service.MembershipService; +import org.hostsharing.hsadminng.web.rest.errors.BadRequestAlertException; +import org.hostsharing.hsadminng.web.rest.util.HeaderUtil; +import org.hostsharing.hsadminng.web.rest.util.PaginationUtil; +import org.hostsharing.hsadminng.service.dto.MembershipDTO; +import org.hostsharing.hsadminng.service.dto.MembershipCriteria; +import org.hostsharing.hsadminng.service.MembershipQueryService; +import io.github.jhipster.web.util.ResponseUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.net.URI; +import java.net.URISyntaxException; + +import java.util.List; +import java.util.Optional; + +/** + * REST controller for managing Membership. + */ +@RestController +@RequestMapping("/api") +public class MembershipResource { + + private final Logger log = LoggerFactory.getLogger(MembershipResource.class); + + private static final String ENTITY_NAME = "membership"; + + private final MembershipService membershipService; + + private final MembershipQueryService membershipQueryService; + + public MembershipResource(MembershipService membershipService, MembershipQueryService membershipQueryService) { + this.membershipService = membershipService; + this.membershipQueryService = membershipQueryService; + } + + /** + * POST /memberships : Create a new membership. + * + * @param membershipDTO the membershipDTO to create + * @return the ResponseEntity with status 201 (Created) and with body the new membershipDTO, or with status 400 (Bad Request) if the membership has already an ID + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PostMapping("/memberships") + public ResponseEntity createMembership(@Valid @RequestBody MembershipDTO membershipDTO) throws URISyntaxException { + log.debug("REST request to save Membership : {}", membershipDTO); + if (membershipDTO.getId() != null) { + throw new BadRequestAlertException("A new membership cannot already have an ID", ENTITY_NAME, "idexists"); + } + MembershipDTO result = membershipService.save(membershipDTO); + return ResponseEntity.created(new URI("/api/memberships/" + result.getId())) + .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())) + .body(result); + } + + /** + * PUT /memberships : Updates an existing membership. + * + * @param membershipDTO the membershipDTO to update + * @return the ResponseEntity with status 200 (OK) and with body the updated membershipDTO, + * or with status 400 (Bad Request) if the membershipDTO is not valid, + * or with status 500 (Internal Server Error) if the membershipDTO couldn't be updated + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PutMapping("/memberships") + public ResponseEntity updateMembership(@Valid @RequestBody MembershipDTO membershipDTO) throws URISyntaxException { + log.debug("REST request to update Membership : {}", membershipDTO); + if (membershipDTO.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + MembershipDTO result = membershipService.save(membershipDTO); + return ResponseEntity.ok() + .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, membershipDTO.getId().toString())) + .body(result); + } + + /** + * GET /memberships : get all the memberships. + * + * @param pageable the pagination information + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the list of memberships in body + */ + @GetMapping("/memberships") + public ResponseEntity> getAllMemberships(MembershipCriteria criteria, Pageable pageable) { + log.debug("REST request to get Memberships by criteria: {}", criteria); + Page page = membershipQueryService.findByCriteria(criteria, pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/memberships"); + return ResponseEntity.ok().headers(headers).body(page.getContent()); + } + + /** + * GET /memberships/count : count all the memberships. + * + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the count in body + */ + @GetMapping("/memberships/count") + public ResponseEntity countMemberships(MembershipCriteria criteria) { + log.debug("REST request to count Memberships by criteria: {}", criteria); + return ResponseEntity.ok().body(membershipQueryService.countByCriteria(criteria)); + } + + /** + * GET /memberships/:id : get the "id" membership. + * + * @param id the id of the membershipDTO to retrieve + * @return the ResponseEntity with status 200 (OK) and with body the membershipDTO, or with status 404 (Not Found) + */ + @GetMapping("/memberships/{id}") + public ResponseEntity getMembership(@PathVariable Long id) { + log.debug("REST request to get Membership : {}", id); + Optional membershipDTO = membershipService.findOne(id); + return ResponseUtil.wrapOrNotFound(membershipDTO); + } + + /** + * DELETE /memberships/:id : delete the "id" membership. + * + * @param id the id of the membershipDTO to delete + * @return the ResponseEntity with status 200 (OK) + */ + @DeleteMapping("/memberships/{id}") + public ResponseEntity deleteMembership(@PathVariable Long id) { + log.debug("REST request to delete Membership : {}", id); + membershipService.delete(id); + return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build(); + } +} diff --git a/src/main/java/org/hostsharing/hsadminng/web/rest/ShareResource.java b/src/main/java/org/hostsharing/hsadminng/web/rest/ShareResource.java new file mode 100644 index 00000000..d7c2d2f2 --- /dev/null +++ b/src/main/java/org/hostsharing/hsadminng/web/rest/ShareResource.java @@ -0,0 +1,138 @@ +package org.hostsharing.hsadminng.web.rest; +import org.hostsharing.hsadminng.service.ShareService; +import org.hostsharing.hsadminng.web.rest.errors.BadRequestAlertException; +import org.hostsharing.hsadminng.web.rest.util.HeaderUtil; +import org.hostsharing.hsadminng.web.rest.util.PaginationUtil; +import org.hostsharing.hsadminng.service.dto.ShareDTO; +import org.hostsharing.hsadminng.service.dto.ShareCriteria; +import org.hostsharing.hsadminng.service.ShareQueryService; +import io.github.jhipster.web.util.ResponseUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.net.URI; +import java.net.URISyntaxException; + +import java.util.List; +import java.util.Optional; + +/** + * REST controller for managing Share. + */ +@RestController +@RequestMapping("/api") +public class ShareResource { + + private final Logger log = LoggerFactory.getLogger(ShareResource.class); + + private static final String ENTITY_NAME = "share"; + + private final ShareService shareService; + + private final ShareQueryService shareQueryService; + + public ShareResource(ShareService shareService, ShareQueryService shareQueryService) { + this.shareService = shareService; + this.shareQueryService = shareQueryService; + } + + /** + * POST /shares : Create a new share. + * + * @param shareDTO the shareDTO to create + * @return the ResponseEntity with status 201 (Created) and with body the new shareDTO, or with status 400 (Bad Request) if the share has already an ID + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PostMapping("/shares") + public ResponseEntity createShare(@Valid @RequestBody ShareDTO shareDTO) throws URISyntaxException { + log.debug("REST request to save Share : {}", shareDTO); + if (shareDTO.getId() != null) { + throw new BadRequestAlertException("A new share cannot already have an ID", ENTITY_NAME, "idexists"); + } + ShareDTO result = shareService.save(shareDTO); + return ResponseEntity.created(new URI("/api/shares/" + result.getId())) + .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())) + .body(result); + } + + /** + * PUT /shares : Updates an existing share. + * + * @param shareDTO the shareDTO to update + * @return the ResponseEntity with status 200 (OK) and with body the updated shareDTO, + * or with status 400 (Bad Request) if the shareDTO is not valid, + * or with status 500 (Internal Server Error) if the shareDTO couldn't be updated + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PutMapping("/shares") + public ResponseEntity updateShare(@Valid @RequestBody ShareDTO shareDTO) throws URISyntaxException { + log.debug("REST request to update Share : {}", shareDTO); + if (shareDTO.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + ShareDTO result = shareService.save(shareDTO); + return ResponseEntity.ok() + .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, shareDTO.getId().toString())) + .body(result); + } + + /** + * GET /shares : get all the shares. + * + * @param pageable the pagination information + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the list of shares in body + */ + @GetMapping("/shares") + public ResponseEntity> getAllShares(ShareCriteria criteria, Pageable pageable) { + log.debug("REST request to get Shares by criteria: {}", criteria); + Page page = shareQueryService.findByCriteria(criteria, pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/shares"); + return ResponseEntity.ok().headers(headers).body(page.getContent()); + } + + /** + * GET /shares/count : count all the shares. + * + * @param criteria the criterias which the requested entities should match + * @return the ResponseEntity with status 200 (OK) and the count in body + */ + @GetMapping("/shares/count") + public ResponseEntity countShares(ShareCriteria criteria) { + log.debug("REST request to count Shares by criteria: {}", criteria); + return ResponseEntity.ok().body(shareQueryService.countByCriteria(criteria)); + } + + /** + * GET /shares/:id : get the "id" share. + * + * @param id the id of the shareDTO to retrieve + * @return the ResponseEntity with status 200 (OK) and with body the shareDTO, or with status 404 (Not Found) + */ + @GetMapping("/shares/{id}") + public ResponseEntity getShare(@PathVariable Long id) { + log.debug("REST request to get Share : {}", id); + Optional shareDTO = shareService.findOne(id); + return ResponseUtil.wrapOrNotFound(shareDTO); + } + + /** + * DELETE /shares/:id : delete the "id" share. + * + * @param id the id of the shareDTO to delete + * @return the ResponseEntity with status 200 (OK) + */ + @DeleteMapping("/shares/{id}") + public ResponseEntity deleteShare(@PathVariable Long id) { + log.debug("REST request to delete Share : {}", id); + shareService.delete(id); + return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build(); + } +} diff --git a/src/main/resources/config/liquibase/changelog/20190403083735_added_entity_Customer.xml b/src/main/resources/config/liquibase/changelog/20190403083735_added_entity_Customer.xml new file mode 100644 index 00000000..8b6f2eb3 --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20190403083735_added_entity_Customer.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/config/liquibase/changelog/20190403083736_added_entity_Contact.xml b/src/main/resources/config/liquibase/changelog/20190403083736_added_entity_Contact.xml new file mode 100644 index 00000000..da4e0b9d --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20190403083736_added_entity_Contact.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/config/liquibase/changelog/20190403083737_added_entity_CustomerContact.xml b/src/main/resources/config/liquibase/changelog/20190403083737_added_entity_CustomerContact.xml new file mode 100644 index 00000000..f9e6013b --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20190403083737_added_entity_CustomerContact.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/config/liquibase/changelog/20190403083737_added_entity_constraints_CustomerContact.xml b/src/main/resources/config/liquibase/changelog/20190403083737_added_entity_constraints_CustomerContact.xml new file mode 100644 index 00000000..bfad5a7e --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20190403083737_added_entity_constraints_CustomerContact.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/src/main/resources/config/liquibase/changelog/20190403083738_added_entity_Membership.xml b/src/main/resources/config/liquibase/changelog/20190403083738_added_entity_Membership.xml new file mode 100644 index 00000000..dbf69e2c --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20190403083738_added_entity_Membership.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/config/liquibase/changelog/20190403083738_added_entity_constraints_Membership.xml b/src/main/resources/config/liquibase/changelog/20190403083738_added_entity_constraints_Membership.xml new file mode 100644 index 00000000..47849491 --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20190403083738_added_entity_constraints_Membership.xml @@ -0,0 +1,18 @@ + + + + + + + + + diff --git a/src/main/resources/config/liquibase/changelog/20190403083739_added_entity_Share.xml b/src/main/resources/config/liquibase/changelog/20190403083739_added_entity_Share.xml new file mode 100644 index 00000000..fc66b034 --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20190403083739_added_entity_Share.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/config/liquibase/changelog/20190403083739_added_entity_constraints_Share.xml b/src/main/resources/config/liquibase/changelog/20190403083739_added_entity_constraints_Share.xml new file mode 100644 index 00000000..a5b4cebd --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20190403083739_added_entity_constraints_Share.xml @@ -0,0 +1,18 @@ + + + + + + + + + diff --git a/src/main/resources/config/liquibase/changelog/20190403083740_added_entity_Asset.xml b/src/main/resources/config/liquibase/changelog/20190403083740_added_entity_Asset.xml new file mode 100644 index 00000000..229a29bc --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20190403083740_added_entity_Asset.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/config/liquibase/changelog/20190403083740_added_entity_constraints_Asset.xml b/src/main/resources/config/liquibase/changelog/20190403083740_added_entity_constraints_Asset.xml new file mode 100644 index 00000000..329a22b8 --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20190403083740_added_entity_constraints_Asset.xml @@ -0,0 +1,18 @@ + + + + + + + + + diff --git a/src/main/resources/config/liquibase/master.xml b/src/main/resources/config/liquibase/master.xml index f2b0b1f7..97a01937 100644 --- a/src/main/resources/config/liquibase/master.xml +++ b/src/main/resources/config/liquibase/master.xml @@ -5,6 +5,16 @@ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd"> + + + + + + + + + + diff --git a/src/main/webapp/app/entities/asset/asset-delete-dialog.component.html b/src/main/webapp/app/entities/asset/asset-delete-dialog.component.html new file mode 100644 index 00000000..bd1b9f78 --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset-delete-dialog.component.html @@ -0,0 +1,19 @@ +
+ + + +
diff --git a/src/main/webapp/app/entities/asset/asset-delete-dialog.component.ts b/src/main/webapp/app/entities/asset/asset-delete-dialog.component.ts new file mode 100644 index 00000000..ff1dd113 --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset-delete-dialog.component.ts @@ -0,0 +1,65 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { IAsset } from 'app/shared/model/asset.model'; +import { AssetService } from './asset.service'; + +@Component({ + selector: 'jhi-asset-delete-dialog', + templateUrl: './asset-delete-dialog.component.html' +}) +export class AssetDeleteDialogComponent { + asset: IAsset; + + constructor(protected assetService: AssetService, public activeModal: NgbActiveModal, protected eventManager: JhiEventManager) {} + + clear() { + this.activeModal.dismiss('cancel'); + } + + confirmDelete(id: number) { + this.assetService.delete(id).subscribe(response => { + this.eventManager.broadcast({ + name: 'assetListModification', + content: 'Deleted an asset' + }); + this.activeModal.dismiss(true); + }); + } +} + +@Component({ + selector: 'jhi-asset-delete-popup', + template: '' +}) +export class AssetDeletePopupComponent implements OnInit, OnDestroy { + protected ngbModalRef: NgbModalRef; + + constructor(protected activatedRoute: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ asset }) => { + setTimeout(() => { + this.ngbModalRef = this.modalService.open(AssetDeleteDialogComponent as Component, { size: 'lg', backdrop: 'static' }); + this.ngbModalRef.componentInstance.asset = asset; + this.ngbModalRef.result.then( + result => { + this.router.navigate(['/asset', { outlets: { popup: null } }]); + this.ngbModalRef = null; + }, + reason => { + this.router.navigate(['/asset', { outlets: { popup: null } }]); + this.ngbModalRef = null; + } + ); + }, 0); + }); + } + + ngOnDestroy() { + this.ngbModalRef = null; + } +} diff --git a/src/main/webapp/app/entities/asset/asset-detail.component.html b/src/main/webapp/app/entities/asset/asset-detail.component.html new file mode 100644 index 00000000..29a4b452 --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset-detail.component.html @@ -0,0 +1,45 @@ +
+
+
+

Asset {{asset.id}}

+
+ +
+
Date
+
+ {{asset.date}} +
+
Action
+
+ {{asset.action}} +
+
Amount
+
+ {{asset.amount}} +
+
Comment
+
+ {{asset.comment}} +
+
Member
+
+ +
+
+ + + + +
+
+
diff --git a/src/main/webapp/app/entities/asset/asset-detail.component.ts b/src/main/webapp/app/entities/asset/asset-detail.component.ts new file mode 100644 index 00000000..635ee255 --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset-detail.component.ts @@ -0,0 +1,24 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { IAsset } from 'app/shared/model/asset.model'; + +@Component({ + selector: 'jhi-asset-detail', + templateUrl: './asset-detail.component.html' +}) +export class AssetDetailComponent implements OnInit { + asset: IAsset; + + constructor(protected activatedRoute: ActivatedRoute) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ asset }) => { + this.asset = asset; + }); + } + + previousState() { + window.history.back(); + } +} diff --git a/src/main/webapp/app/entities/asset/asset-update.component.html b/src/main/webapp/app/entities/asset/asset-update.component.html new file mode 100644 index 00000000..38bc16c7 --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset-update.component.html @@ -0,0 +1,90 @@ +
+
+
+

Create or edit a Asset

+
+ +
+ + +
+
+ +
+ + + + +
+
+ + This field is required. + +
+
+
+ + +
+ + This field is required. + +
+
+
+ + +
+ + This field is required. + + + This field should be a number. + +
+
+
+ + +
+ + This field cannot be longer than 160 characters. + +
+
+ +
+ + +
+
+
+ + +
+
+
+
diff --git a/src/main/webapp/app/entities/asset/asset-update.component.ts b/src/main/webapp/app/entities/asset/asset-update.component.ts new file mode 100644 index 00000000..98147937 --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset-update.component.ts @@ -0,0 +1,78 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import * as moment from 'moment'; +import { JhiAlertService } from 'ng-jhipster'; +import { IAsset } from 'app/shared/model/asset.model'; +import { AssetService } from './asset.service'; +import { IMembership } from 'app/shared/model/membership.model'; +import { MembershipService } from 'app/entities/membership'; + +@Component({ + selector: 'jhi-asset-update', + templateUrl: './asset-update.component.html' +}) +export class AssetUpdateComponent implements OnInit { + asset: IAsset; + isSaving: boolean; + + memberships: IMembership[]; + dateDp: any; + + constructor( + protected jhiAlertService: JhiAlertService, + protected assetService: AssetService, + protected membershipService: MembershipService, + protected activatedRoute: ActivatedRoute + ) {} + + ngOnInit() { + this.isSaving = false; + this.activatedRoute.data.subscribe(({ asset }) => { + this.asset = asset; + }); + this.membershipService + .query() + .pipe( + filter((mayBeOk: HttpResponse) => mayBeOk.ok), + map((response: HttpResponse) => response.body) + ) + .subscribe((res: IMembership[]) => (this.memberships = res), (res: HttpErrorResponse) => this.onError(res.message)); + } + + previousState() { + window.history.back(); + } + + save() { + this.isSaving = true; + if (this.asset.id !== undefined) { + this.subscribeToSaveResponse(this.assetService.update(this.asset)); + } else { + this.subscribeToSaveResponse(this.assetService.create(this.asset)); + } + } + + protected subscribeToSaveResponse(result: Observable>) { + result.subscribe((res: HttpResponse) => this.onSaveSuccess(), (res: HttpErrorResponse) => this.onSaveError()); + } + + protected onSaveSuccess() { + this.isSaving = false; + this.previousState(); + } + + protected onSaveError() { + this.isSaving = false; + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } + + trackMembershipById(index: number, item: IMembership) { + return item.id; + } +} diff --git a/src/main/webapp/app/entities/asset/asset.component.html b/src/main/webapp/app/entities/asset/asset.component.html new file mode 100644 index 00000000..0ac03e8f --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset.component.html @@ -0,0 +1,66 @@ +
+

+ Assets + +

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
ID Date Action Amount Comment Member
{{asset.id}}{{asset.date | date:'mediumDate'}}{{asset.action}}{{asset.amount}}{{asset.comment}} + + +
+ + + +
+
+
+
diff --git a/src/main/webapp/app/entities/asset/asset.component.ts b/src/main/webapp/app/entities/asset/asset.component.ts new file mode 100644 index 00000000..4a5c8445 --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset.component.ts @@ -0,0 +1,108 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { HttpErrorResponse, HttpHeaders, HttpResponse } from '@angular/common/http'; +import { Subscription } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { JhiEventManager, JhiParseLinks, JhiAlertService } from 'ng-jhipster'; + +import { IAsset } from 'app/shared/model/asset.model'; +import { AccountService } from 'app/core'; + +import { ITEMS_PER_PAGE } from 'app/shared'; +import { AssetService } from './asset.service'; + +@Component({ + selector: 'jhi-asset', + templateUrl: './asset.component.html' +}) +export class AssetComponent implements OnInit, OnDestroy { + assets: IAsset[]; + currentAccount: any; + eventSubscriber: Subscription; + itemsPerPage: number; + links: any; + page: any; + predicate: any; + reverse: any; + totalItems: number; + + constructor( + protected assetService: AssetService, + protected jhiAlertService: JhiAlertService, + protected eventManager: JhiEventManager, + protected parseLinks: JhiParseLinks, + protected accountService: AccountService + ) { + this.assets = []; + this.itemsPerPage = ITEMS_PER_PAGE; + this.page = 0; + this.links = { + last: 0 + }; + this.predicate = 'id'; + this.reverse = true; + } + + loadAll() { + this.assetService + .query({ + page: this.page, + size: this.itemsPerPage, + sort: this.sort() + }) + .subscribe( + (res: HttpResponse) => this.paginateAssets(res.body, res.headers), + (res: HttpErrorResponse) => this.onError(res.message) + ); + } + + reset() { + this.page = 0; + this.assets = []; + this.loadAll(); + } + + loadPage(page) { + this.page = page; + this.loadAll(); + } + + ngOnInit() { + this.loadAll(); + this.accountService.identity().then(account => { + this.currentAccount = account; + }); + this.registerChangeInAssets(); + } + + ngOnDestroy() { + this.eventManager.destroy(this.eventSubscriber); + } + + trackId(index: number, item: IAsset) { + return item.id; + } + + registerChangeInAssets() { + this.eventSubscriber = this.eventManager.subscribe('assetListModification', response => this.reset()); + } + + sort() { + const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; + if (this.predicate !== 'id') { + result.push('id'); + } + return result; + } + + protected paginateAssets(data: IAsset[], headers: HttpHeaders) { + this.links = this.parseLinks.parse(headers.get('link')); + this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + for (let i = 0; i < data.length; i++) { + this.assets.push(data[i]); + } + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } +} diff --git a/src/main/webapp/app/entities/asset/asset.module.ts b/src/main/webapp/app/entities/asset/asset.module.ts new file mode 100644 index 00000000..282a44e4 --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset.module.ts @@ -0,0 +1,34 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { JhiLanguageService } from 'ng-jhipster'; +import { JhiLanguageHelper } from 'app/core'; + +import { HsadminNgSharedModule } from 'app/shared'; +import { + AssetComponent, + AssetDetailComponent, + AssetUpdateComponent, + AssetDeletePopupComponent, + AssetDeleteDialogComponent, + assetRoute, + assetPopupRoute +} from './'; + +const ENTITY_STATES = [...assetRoute, ...assetPopupRoute]; + +@NgModule({ + imports: [HsadminNgSharedModule, RouterModule.forChild(ENTITY_STATES)], + declarations: [AssetComponent, AssetDetailComponent, AssetUpdateComponent, AssetDeleteDialogComponent, AssetDeletePopupComponent], + entryComponents: [AssetComponent, AssetUpdateComponent, AssetDeleteDialogComponent, AssetDeletePopupComponent], + providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class HsadminNgAssetModule { + constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { + this.languageHelper.language.subscribe((languageKey: string) => { + if (languageKey !== undefined) { + this.languageService.changeLanguage(languageKey); + } + }); + } +} diff --git a/src/main/webapp/app/entities/asset/asset.route.ts b/src/main/webapp/app/entities/asset/asset.route.ts new file mode 100644 index 00000000..b7e030d8 --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset.route.ts @@ -0,0 +1,93 @@ +import { Injectable } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; +import { UserRouteAccessService } from 'app/core'; +import { Observable, of } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { Asset } from 'app/shared/model/asset.model'; +import { AssetService } from './asset.service'; +import { AssetComponent } from './asset.component'; +import { AssetDetailComponent } from './asset-detail.component'; +import { AssetUpdateComponent } from './asset-update.component'; +import { AssetDeletePopupComponent } from './asset-delete-dialog.component'; +import { IAsset } from 'app/shared/model/asset.model'; + +@Injectable({ providedIn: 'root' }) +export class AssetResolve implements Resolve { + constructor(private service: AssetService) {} + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + const id = route.params['id'] ? route.params['id'] : null; + if (id) { + return this.service.find(id).pipe( + filter((response: HttpResponse) => response.ok), + map((asset: HttpResponse) => asset.body) + ); + } + return of(new Asset()); + } +} + +export const assetRoute: Routes = [ + { + path: '', + component: AssetComponent, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.asset.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/view', + component: AssetDetailComponent, + resolve: { + asset: AssetResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.asset.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: 'new', + component: AssetUpdateComponent, + resolve: { + asset: AssetResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.asset.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/edit', + component: AssetUpdateComponent, + resolve: { + asset: AssetResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.asset.home.title' + }, + canActivate: [UserRouteAccessService] + } +]; + +export const assetPopupRoute: Routes = [ + { + path: ':id/delete', + component: AssetDeletePopupComponent, + resolve: { + asset: AssetResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.asset.home.title' + }, + canActivate: [UserRouteAccessService], + outlet: 'popup' + } +]; diff --git a/src/main/webapp/app/entities/asset/asset.service.ts b/src/main/webapp/app/entities/asset/asset.service.ts new file mode 100644 index 00000000..9ef5cbde --- /dev/null +++ b/src/main/webapp/app/entities/asset/asset.service.ts @@ -0,0 +1,74 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import * as moment from 'moment'; +import { DATE_FORMAT } from 'app/shared/constants/input.constants'; +import { map } from 'rxjs/operators'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { createRequestOption } from 'app/shared'; +import { IAsset } from 'app/shared/model/asset.model'; + +type EntityResponseType = HttpResponse; +type EntityArrayResponseType = HttpResponse; + +@Injectable({ providedIn: 'root' }) +export class AssetService { + public resourceUrl = SERVER_API_URL + 'api/assets'; + + constructor(protected http: HttpClient) {} + + create(asset: IAsset): Observable { + const copy = this.convertDateFromClient(asset); + return this.http + .post(this.resourceUrl, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + update(asset: IAsset): Observable { + const copy = this.convertDateFromClient(asset); + return this.http + .put(this.resourceUrl, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + find(id: number): Observable { + return this.http + .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + query(req?: any): Observable { + const options = createRequestOption(req); + return this.http + .get(this.resourceUrl, { params: options, observe: 'response' }) + .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); + } + + delete(id: number): Observable> { + return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } + + protected convertDateFromClient(asset: IAsset): IAsset { + const copy: IAsset = Object.assign({}, asset, { + date: asset.date != null && asset.date.isValid() ? asset.date.format(DATE_FORMAT) : null + }); + return copy; + } + + protected convertDateFromServer(res: EntityResponseType): EntityResponseType { + if (res.body) { + res.body.date = res.body.date != null ? moment(res.body.date) : null; + } + return res; + } + + protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { + if (res.body) { + res.body.forEach((asset: IAsset) => { + asset.date = asset.date != null ? moment(asset.date) : null; + }); + } + return res; + } +} diff --git a/src/main/webapp/app/entities/asset/index.ts b/src/main/webapp/app/entities/asset/index.ts new file mode 100644 index 00000000..5f865f3d --- /dev/null +++ b/src/main/webapp/app/entities/asset/index.ts @@ -0,0 +1,6 @@ +export * from './asset.service'; +export * from './asset-update.component'; +export * from './asset-delete-dialog.component'; +export * from './asset-detail.component'; +export * from './asset.component'; +export * from './asset.route'; diff --git a/src/main/webapp/app/entities/contact/contact-delete-dialog.component.html b/src/main/webapp/app/entities/contact/contact-delete-dialog.component.html new file mode 100644 index 00000000..725d215a --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact-delete-dialog.component.html @@ -0,0 +1,19 @@ +
+ + + +
diff --git a/src/main/webapp/app/entities/contact/contact-delete-dialog.component.ts b/src/main/webapp/app/entities/contact/contact-delete-dialog.component.ts new file mode 100644 index 00000000..eef90f7f --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact-delete-dialog.component.ts @@ -0,0 +1,65 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { IContact } from 'app/shared/model/contact.model'; +import { ContactService } from './contact.service'; + +@Component({ + selector: 'jhi-contact-delete-dialog', + templateUrl: './contact-delete-dialog.component.html' +}) +export class ContactDeleteDialogComponent { + contact: IContact; + + constructor(protected contactService: ContactService, public activeModal: NgbActiveModal, protected eventManager: JhiEventManager) {} + + clear() { + this.activeModal.dismiss('cancel'); + } + + confirmDelete(id: number) { + this.contactService.delete(id).subscribe(response => { + this.eventManager.broadcast({ + name: 'contactListModification', + content: 'Deleted an contact' + }); + this.activeModal.dismiss(true); + }); + } +} + +@Component({ + selector: 'jhi-contact-delete-popup', + template: '' +}) +export class ContactDeletePopupComponent implements OnInit, OnDestroy { + protected ngbModalRef: NgbModalRef; + + constructor(protected activatedRoute: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ contact }) => { + setTimeout(() => { + this.ngbModalRef = this.modalService.open(ContactDeleteDialogComponent as Component, { size: 'lg', backdrop: 'static' }); + this.ngbModalRef.componentInstance.contact = contact; + this.ngbModalRef.result.then( + result => { + this.router.navigate(['/contact', { outlets: { popup: null } }]); + this.ngbModalRef = null; + }, + reason => { + this.router.navigate(['/contact', { outlets: { popup: null } }]); + this.ngbModalRef = null; + } + ); + }, 0); + }); + } + + ngOnDestroy() { + this.ngbModalRef = null; + } +} diff --git a/src/main/webapp/app/entities/contact/contact-detail.component.html b/src/main/webapp/app/entities/contact/contact-detail.component.html new file mode 100644 index 00000000..37941961 --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact-detail.component.html @@ -0,0 +1,35 @@ +
+
+
+

Contact {{contact.id}}

+
+ +
+
First Name
+
+ {{contact.firstName}} +
+
Last Name
+
+ {{contact.lastName}} +
+
Email
+
+ {{contact.email}} +
+
+ + + + +
+
+
diff --git a/src/main/webapp/app/entities/contact/contact-detail.component.ts b/src/main/webapp/app/entities/contact/contact-detail.component.ts new file mode 100644 index 00000000..fc19a9d7 --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact-detail.component.ts @@ -0,0 +1,24 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { IContact } from 'app/shared/model/contact.model'; + +@Component({ + selector: 'jhi-contact-detail', + templateUrl: './contact-detail.component.html' +}) +export class ContactDetailComponent implements OnInit { + contact: IContact; + + constructor(protected activatedRoute: ActivatedRoute) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ contact }) => { + this.contact = contact; + }); + } + + previousState() { + window.history.back(); + } +} diff --git a/src/main/webapp/app/entities/contact/contact-update.component.html b/src/main/webapp/app/entities/contact/contact-update.component.html new file mode 100644 index 00000000..c2410a68 --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact-update.component.html @@ -0,0 +1,69 @@ +
+
+
+

Create or edit a Contact

+
+ +
+ + +
+
+ + +
+ + This field is required. + + + This field cannot be longer than 80 characters. + +
+
+
+ + +
+ + This field is required. + + + This field cannot be longer than 80 characters. + +
+
+
+ + +
+ + This field is required. + + + This field cannot be longer than 80 characters. + +
+
+ +
+
+ + +
+
+
+
diff --git a/src/main/webapp/app/entities/contact/contact-update.component.ts b/src/main/webapp/app/entities/contact/contact-update.component.ts new file mode 100644 index 00000000..15960791 --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact-update.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { IContact } from 'app/shared/model/contact.model'; +import { ContactService } from './contact.service'; + +@Component({ + selector: 'jhi-contact-update', + templateUrl: './contact-update.component.html' +}) +export class ContactUpdateComponent implements OnInit { + contact: IContact; + isSaving: boolean; + + constructor(protected contactService: ContactService, protected activatedRoute: ActivatedRoute) {} + + ngOnInit() { + this.isSaving = false; + this.activatedRoute.data.subscribe(({ contact }) => { + this.contact = contact; + }); + } + + previousState() { + window.history.back(); + } + + save() { + this.isSaving = true; + if (this.contact.id !== undefined) { + this.subscribeToSaveResponse(this.contactService.update(this.contact)); + } else { + this.subscribeToSaveResponse(this.contactService.create(this.contact)); + } + } + + protected subscribeToSaveResponse(result: Observable>) { + result.subscribe((res: HttpResponse) => this.onSaveSuccess(), (res: HttpErrorResponse) => this.onSaveError()); + } + + protected onSaveSuccess() { + this.isSaving = false; + this.previousState(); + } + + protected onSaveError() { + this.isSaving = false; + } +} diff --git a/src/main/webapp/app/entities/contact/contact.component.html b/src/main/webapp/app/entities/contact/contact.component.html new file mode 100644 index 00000000..7a99d963 --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact.component.html @@ -0,0 +1,58 @@ +
+

+ Contacts + +

+ +
+
+ + + + + + + + + + + + + + + + + + + +
ID First Name Last Name Email
{{contact.id}}{{contact.firstName}}{{contact.lastName}}{{contact.email}} +
+ + + +
+
+
+
diff --git a/src/main/webapp/app/entities/contact/contact.component.ts b/src/main/webapp/app/entities/contact/contact.component.ts new file mode 100644 index 00000000..60c0f99d --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact.component.ts @@ -0,0 +1,108 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { HttpErrorResponse, HttpHeaders, HttpResponse } from '@angular/common/http'; +import { Subscription } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { JhiEventManager, JhiParseLinks, JhiAlertService } from 'ng-jhipster'; + +import { IContact } from 'app/shared/model/contact.model'; +import { AccountService } from 'app/core'; + +import { ITEMS_PER_PAGE } from 'app/shared'; +import { ContactService } from './contact.service'; + +@Component({ + selector: 'jhi-contact', + templateUrl: './contact.component.html' +}) +export class ContactComponent implements OnInit, OnDestroy { + contacts: IContact[]; + currentAccount: any; + eventSubscriber: Subscription; + itemsPerPage: number; + links: any; + page: any; + predicate: any; + reverse: any; + totalItems: number; + + constructor( + protected contactService: ContactService, + protected jhiAlertService: JhiAlertService, + protected eventManager: JhiEventManager, + protected parseLinks: JhiParseLinks, + protected accountService: AccountService + ) { + this.contacts = []; + this.itemsPerPage = ITEMS_PER_PAGE; + this.page = 0; + this.links = { + last: 0 + }; + this.predicate = 'id'; + this.reverse = true; + } + + loadAll() { + this.contactService + .query({ + page: this.page, + size: this.itemsPerPage, + sort: this.sort() + }) + .subscribe( + (res: HttpResponse) => this.paginateContacts(res.body, res.headers), + (res: HttpErrorResponse) => this.onError(res.message) + ); + } + + reset() { + this.page = 0; + this.contacts = []; + this.loadAll(); + } + + loadPage(page) { + this.page = page; + this.loadAll(); + } + + ngOnInit() { + this.loadAll(); + this.accountService.identity().then(account => { + this.currentAccount = account; + }); + this.registerChangeInContacts(); + } + + ngOnDestroy() { + this.eventManager.destroy(this.eventSubscriber); + } + + trackId(index: number, item: IContact) { + return item.id; + } + + registerChangeInContacts() { + this.eventSubscriber = this.eventManager.subscribe('contactListModification', response => this.reset()); + } + + sort() { + const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; + if (this.predicate !== 'id') { + result.push('id'); + } + return result; + } + + protected paginateContacts(data: IContact[], headers: HttpHeaders) { + this.links = this.parseLinks.parse(headers.get('link')); + this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + for (let i = 0; i < data.length; i++) { + this.contacts.push(data[i]); + } + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } +} diff --git a/src/main/webapp/app/entities/contact/contact.module.ts b/src/main/webapp/app/entities/contact/contact.module.ts new file mode 100644 index 00000000..21e6975d --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact.module.ts @@ -0,0 +1,40 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { JhiLanguageService } from 'ng-jhipster'; +import { JhiLanguageHelper } from 'app/core'; + +import { HsadminNgSharedModule } from 'app/shared'; +import { + ContactComponent, + ContactDetailComponent, + ContactUpdateComponent, + ContactDeletePopupComponent, + ContactDeleteDialogComponent, + contactRoute, + contactPopupRoute +} from './'; + +const ENTITY_STATES = [...contactRoute, ...contactPopupRoute]; + +@NgModule({ + imports: [HsadminNgSharedModule, RouterModule.forChild(ENTITY_STATES)], + declarations: [ + ContactComponent, + ContactDetailComponent, + ContactUpdateComponent, + ContactDeleteDialogComponent, + ContactDeletePopupComponent + ], + entryComponents: [ContactComponent, ContactUpdateComponent, ContactDeleteDialogComponent, ContactDeletePopupComponent], + providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class HsadminNgContactModule { + constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { + this.languageHelper.language.subscribe((languageKey: string) => { + if (languageKey !== undefined) { + this.languageService.changeLanguage(languageKey); + } + }); + } +} diff --git a/src/main/webapp/app/entities/contact/contact.route.ts b/src/main/webapp/app/entities/contact/contact.route.ts new file mode 100644 index 00000000..b3e7490e --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact.route.ts @@ -0,0 +1,93 @@ +import { Injectable } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; +import { UserRouteAccessService } from 'app/core'; +import { Observable, of } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { Contact } from 'app/shared/model/contact.model'; +import { ContactService } from './contact.service'; +import { ContactComponent } from './contact.component'; +import { ContactDetailComponent } from './contact-detail.component'; +import { ContactUpdateComponent } from './contact-update.component'; +import { ContactDeletePopupComponent } from './contact-delete-dialog.component'; +import { IContact } from 'app/shared/model/contact.model'; + +@Injectable({ providedIn: 'root' }) +export class ContactResolve implements Resolve { + constructor(private service: ContactService) {} + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + const id = route.params['id'] ? route.params['id'] : null; + if (id) { + return this.service.find(id).pipe( + filter((response: HttpResponse) => response.ok), + map((contact: HttpResponse) => contact.body) + ); + } + return of(new Contact()); + } +} + +export const contactRoute: Routes = [ + { + path: '', + component: ContactComponent, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.contact.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/view', + component: ContactDetailComponent, + resolve: { + contact: ContactResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.contact.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: 'new', + component: ContactUpdateComponent, + resolve: { + contact: ContactResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.contact.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/edit', + component: ContactUpdateComponent, + resolve: { + contact: ContactResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.contact.home.title' + }, + canActivate: [UserRouteAccessService] + } +]; + +export const contactPopupRoute: Routes = [ + { + path: ':id/delete', + component: ContactDeletePopupComponent, + resolve: { + contact: ContactResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.contact.home.title' + }, + canActivate: [UserRouteAccessService], + outlet: 'popup' + } +]; diff --git a/src/main/webapp/app/entities/contact/contact.service.ts b/src/main/webapp/app/entities/contact/contact.service.ts new file mode 100644 index 00000000..6c516cd4 --- /dev/null +++ b/src/main/webapp/app/entities/contact/contact.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { createRequestOption } from 'app/shared'; +import { IContact } from 'app/shared/model/contact.model'; + +type EntityResponseType = HttpResponse; +type EntityArrayResponseType = HttpResponse; + +@Injectable({ providedIn: 'root' }) +export class ContactService { + public resourceUrl = SERVER_API_URL + 'api/contacts'; + + constructor(protected http: HttpClient) {} + + create(contact: IContact): Observable { + return this.http.post(this.resourceUrl, contact, { observe: 'response' }); + } + + update(contact: IContact): Observable { + return this.http.put(this.resourceUrl, contact, { observe: 'response' }); + } + + find(id: number): Observable { + return this.http.get(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } + + query(req?: any): Observable { + const options = createRequestOption(req); + return this.http.get(this.resourceUrl, { params: options, observe: 'response' }); + } + + delete(id: number): Observable> { + return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } +} diff --git a/src/main/webapp/app/entities/contact/index.ts b/src/main/webapp/app/entities/contact/index.ts new file mode 100644 index 00000000..08474313 --- /dev/null +++ b/src/main/webapp/app/entities/contact/index.ts @@ -0,0 +1,6 @@ +export * from './contact.service'; +export * from './contact-update.component'; +export * from './contact-delete-dialog.component'; +export * from './contact-detail.component'; +export * from './contact.component'; +export * from './contact.route'; diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact-delete-dialog.component.html b/src/main/webapp/app/entities/customer-contact/customer-contact-delete-dialog.component.html new file mode 100644 index 00000000..d4532275 --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact-delete-dialog.component.html @@ -0,0 +1,19 @@ +
+ + + +
diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact-delete-dialog.component.ts b/src/main/webapp/app/entities/customer-contact/customer-contact-delete-dialog.component.ts new file mode 100644 index 00000000..1b5157df --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact-delete-dialog.component.ts @@ -0,0 +1,72 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { ICustomerContact } from 'app/shared/model/customer-contact.model'; +import { CustomerContactService } from './customer-contact.service'; + +@Component({ + selector: 'jhi-customer-contact-delete-dialog', + templateUrl: './customer-contact-delete-dialog.component.html' +}) +export class CustomerContactDeleteDialogComponent { + customerContact: ICustomerContact; + + constructor( + protected customerContactService: CustomerContactService, + public activeModal: NgbActiveModal, + protected eventManager: JhiEventManager + ) {} + + clear() { + this.activeModal.dismiss('cancel'); + } + + confirmDelete(id: number) { + this.customerContactService.delete(id).subscribe(response => { + this.eventManager.broadcast({ + name: 'customerContactListModification', + content: 'Deleted an customerContact' + }); + this.activeModal.dismiss(true); + }); + } +} + +@Component({ + selector: 'jhi-customer-contact-delete-popup', + template: '' +}) +export class CustomerContactDeletePopupComponent implements OnInit, OnDestroy { + protected ngbModalRef: NgbModalRef; + + constructor(protected activatedRoute: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ customerContact }) => { + setTimeout(() => { + this.ngbModalRef = this.modalService.open(CustomerContactDeleteDialogComponent as Component, { + size: 'lg', + backdrop: 'static' + }); + this.ngbModalRef.componentInstance.customerContact = customerContact; + this.ngbModalRef.result.then( + result => { + this.router.navigate(['/customer-contact', { outlets: { popup: null } }]); + this.ngbModalRef = null; + }, + reason => { + this.router.navigate(['/customer-contact', { outlets: { popup: null } }]); + this.ngbModalRef = null; + } + ); + }, 0); + }); + } + + ngOnDestroy() { + this.ngbModalRef = null; + } +} diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact-detail.component.html b/src/main/webapp/app/entities/customer-contact/customer-contact-detail.component.html new file mode 100644 index 00000000..8deb192f --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact-detail.component.html @@ -0,0 +1,39 @@ +
+
+
+

Customer Contact {{customerContact.id}}

+
+ +
+
Role
+
+ {{customerContact.role}} +
+
Contact
+
+ +
+
Customer
+
+ +
+
+ + + + +
+
+
diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact-detail.component.ts b/src/main/webapp/app/entities/customer-contact/customer-contact-detail.component.ts new file mode 100644 index 00000000..655af363 --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact-detail.component.ts @@ -0,0 +1,24 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { ICustomerContact } from 'app/shared/model/customer-contact.model'; + +@Component({ + selector: 'jhi-customer-contact-detail', + templateUrl: './customer-contact-detail.component.html' +}) +export class CustomerContactDetailComponent implements OnInit { + customerContact: ICustomerContact; + + constructor(protected activatedRoute: ActivatedRoute) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ customerContact }) => { + this.customerContact = customerContact; + }); + } + + previousState() { + window.history.back(); + } +} diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact-update.component.html b/src/main/webapp/app/entities/customer-contact/customer-contact-update.component.html new file mode 100644 index 00000000..f481c079 --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact-update.component.html @@ -0,0 +1,64 @@ +
+
+
+

Create or edit a Customer Contact

+
+ +
+ + +
+
+ + +
+ + This field is required. + +
+
+ +
+ + +
+
+ + This field is required. + +
+
+ + +
+
+ + This field is required. + +
+
+
+ + +
+
+
+
diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact-update.component.ts b/src/main/webapp/app/entities/customer-contact/customer-contact-update.component.ts new file mode 100644 index 00000000..05302d6b --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact-update.component.ts @@ -0,0 +1,92 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { JhiAlertService } from 'ng-jhipster'; +import { ICustomerContact } from 'app/shared/model/customer-contact.model'; +import { CustomerContactService } from './customer-contact.service'; +import { IContact } from 'app/shared/model/contact.model'; +import { ContactService } from 'app/entities/contact'; +import { ICustomer } from 'app/shared/model/customer.model'; +import { CustomerService } from 'app/entities/customer'; + +@Component({ + selector: 'jhi-customer-contact-update', + templateUrl: './customer-contact-update.component.html' +}) +export class CustomerContactUpdateComponent implements OnInit { + customerContact: ICustomerContact; + isSaving: boolean; + + contacts: IContact[]; + + customers: ICustomer[]; + + constructor( + protected jhiAlertService: JhiAlertService, + protected customerContactService: CustomerContactService, + protected contactService: ContactService, + protected customerService: CustomerService, + protected activatedRoute: ActivatedRoute + ) {} + + ngOnInit() { + this.isSaving = false; + this.activatedRoute.data.subscribe(({ customerContact }) => { + this.customerContact = customerContact; + }); + this.contactService + .query() + .pipe( + filter((mayBeOk: HttpResponse) => mayBeOk.ok), + map((response: HttpResponse) => response.body) + ) + .subscribe((res: IContact[]) => (this.contacts = res), (res: HttpErrorResponse) => this.onError(res.message)); + this.customerService + .query() + .pipe( + filter((mayBeOk: HttpResponse) => mayBeOk.ok), + map((response: HttpResponse) => response.body) + ) + .subscribe((res: ICustomer[]) => (this.customers = res), (res: HttpErrorResponse) => this.onError(res.message)); + } + + previousState() { + window.history.back(); + } + + save() { + this.isSaving = true; + if (this.customerContact.id !== undefined) { + this.subscribeToSaveResponse(this.customerContactService.update(this.customerContact)); + } else { + this.subscribeToSaveResponse(this.customerContactService.create(this.customerContact)); + } + } + + protected subscribeToSaveResponse(result: Observable>) { + result.subscribe((res: HttpResponse) => this.onSaveSuccess(), (res: HttpErrorResponse) => this.onSaveError()); + } + + protected onSaveSuccess() { + this.isSaving = false; + this.previousState(); + } + + protected onSaveError() { + this.isSaving = false; + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } + + trackContactById(index: number, item: IContact) { + return item.id; + } + + trackCustomerById(index: number, item: ICustomer) { + return item.id; + } +} diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact.component.html b/src/main/webapp/app/entities/customer-contact/customer-contact.component.html new file mode 100644 index 00000000..ac4d18d6 --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact.component.html @@ -0,0 +1,66 @@ +
+

+ Customer Contacts + +

+ +
+
+ + + + + + + + + + + + + + + + + + + +
ID Role Contact Customer
{{customerContact.id}}{{customerContact.role}} + + + + +
+ + + +
+
+
+
diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact.component.ts b/src/main/webapp/app/entities/customer-contact/customer-contact.component.ts new file mode 100644 index 00000000..fd174030 --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact.component.ts @@ -0,0 +1,108 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { HttpErrorResponse, HttpHeaders, HttpResponse } from '@angular/common/http'; +import { Subscription } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { JhiEventManager, JhiParseLinks, JhiAlertService } from 'ng-jhipster'; + +import { ICustomerContact } from 'app/shared/model/customer-contact.model'; +import { AccountService } from 'app/core'; + +import { ITEMS_PER_PAGE } from 'app/shared'; +import { CustomerContactService } from './customer-contact.service'; + +@Component({ + selector: 'jhi-customer-contact', + templateUrl: './customer-contact.component.html' +}) +export class CustomerContactComponent implements OnInit, OnDestroy { + customerContacts: ICustomerContact[]; + currentAccount: any; + eventSubscriber: Subscription; + itemsPerPage: number; + links: any; + page: any; + predicate: any; + reverse: any; + totalItems: number; + + constructor( + protected customerContactService: CustomerContactService, + protected jhiAlertService: JhiAlertService, + protected eventManager: JhiEventManager, + protected parseLinks: JhiParseLinks, + protected accountService: AccountService + ) { + this.customerContacts = []; + this.itemsPerPage = ITEMS_PER_PAGE; + this.page = 0; + this.links = { + last: 0 + }; + this.predicate = 'id'; + this.reverse = true; + } + + loadAll() { + this.customerContactService + .query({ + page: this.page, + size: this.itemsPerPage, + sort: this.sort() + }) + .subscribe( + (res: HttpResponse) => this.paginateCustomerContacts(res.body, res.headers), + (res: HttpErrorResponse) => this.onError(res.message) + ); + } + + reset() { + this.page = 0; + this.customerContacts = []; + this.loadAll(); + } + + loadPage(page) { + this.page = page; + this.loadAll(); + } + + ngOnInit() { + this.loadAll(); + this.accountService.identity().then(account => { + this.currentAccount = account; + }); + this.registerChangeInCustomerContacts(); + } + + ngOnDestroy() { + this.eventManager.destroy(this.eventSubscriber); + } + + trackId(index: number, item: ICustomerContact) { + return item.id; + } + + registerChangeInCustomerContacts() { + this.eventSubscriber = this.eventManager.subscribe('customerContactListModification', response => this.reset()); + } + + sort() { + const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; + if (this.predicate !== 'id') { + result.push('id'); + } + return result; + } + + protected paginateCustomerContacts(data: ICustomerContact[], headers: HttpHeaders) { + this.links = this.parseLinks.parse(headers.get('link')); + this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + for (let i = 0; i < data.length; i++) { + this.customerContacts.push(data[i]); + } + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } +} diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact.module.ts b/src/main/webapp/app/entities/customer-contact/customer-contact.module.ts new file mode 100644 index 00000000..4be5e7cf --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact.module.ts @@ -0,0 +1,45 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { JhiLanguageService } from 'ng-jhipster'; +import { JhiLanguageHelper } from 'app/core'; + +import { HsadminNgSharedModule } from 'app/shared'; +import { + CustomerContactComponent, + CustomerContactDetailComponent, + CustomerContactUpdateComponent, + CustomerContactDeletePopupComponent, + CustomerContactDeleteDialogComponent, + customerContactRoute, + customerContactPopupRoute +} from './'; + +const ENTITY_STATES = [...customerContactRoute, ...customerContactPopupRoute]; + +@NgModule({ + imports: [HsadminNgSharedModule, RouterModule.forChild(ENTITY_STATES)], + declarations: [ + CustomerContactComponent, + CustomerContactDetailComponent, + CustomerContactUpdateComponent, + CustomerContactDeleteDialogComponent, + CustomerContactDeletePopupComponent + ], + entryComponents: [ + CustomerContactComponent, + CustomerContactUpdateComponent, + CustomerContactDeleteDialogComponent, + CustomerContactDeletePopupComponent + ], + providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class HsadminNgCustomerContactModule { + constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { + this.languageHelper.language.subscribe((languageKey: string) => { + if (languageKey !== undefined) { + this.languageService.changeLanguage(languageKey); + } + }); + } +} diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact.route.ts b/src/main/webapp/app/entities/customer-contact/customer-contact.route.ts new file mode 100644 index 00000000..827e2b63 --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact.route.ts @@ -0,0 +1,93 @@ +import { Injectable } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; +import { UserRouteAccessService } from 'app/core'; +import { Observable, of } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { CustomerContact } from 'app/shared/model/customer-contact.model'; +import { CustomerContactService } from './customer-contact.service'; +import { CustomerContactComponent } from './customer-contact.component'; +import { CustomerContactDetailComponent } from './customer-contact-detail.component'; +import { CustomerContactUpdateComponent } from './customer-contact-update.component'; +import { CustomerContactDeletePopupComponent } from './customer-contact-delete-dialog.component'; +import { ICustomerContact } from 'app/shared/model/customer-contact.model'; + +@Injectable({ providedIn: 'root' }) +export class CustomerContactResolve implements Resolve { + constructor(private service: CustomerContactService) {} + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + const id = route.params['id'] ? route.params['id'] : null; + if (id) { + return this.service.find(id).pipe( + filter((response: HttpResponse) => response.ok), + map((customerContact: HttpResponse) => customerContact.body) + ); + } + return of(new CustomerContact()); + } +} + +export const customerContactRoute: Routes = [ + { + path: '', + component: CustomerContactComponent, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.customerContact.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/view', + component: CustomerContactDetailComponent, + resolve: { + customerContact: CustomerContactResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.customerContact.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: 'new', + component: CustomerContactUpdateComponent, + resolve: { + customerContact: CustomerContactResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.customerContact.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/edit', + component: CustomerContactUpdateComponent, + resolve: { + customerContact: CustomerContactResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.customerContact.home.title' + }, + canActivate: [UserRouteAccessService] + } +]; + +export const customerContactPopupRoute: Routes = [ + { + path: ':id/delete', + component: CustomerContactDeletePopupComponent, + resolve: { + customerContact: CustomerContactResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.customerContact.home.title' + }, + canActivate: [UserRouteAccessService], + outlet: 'popup' + } +]; diff --git a/src/main/webapp/app/entities/customer-contact/customer-contact.service.ts b/src/main/webapp/app/entities/customer-contact/customer-contact.service.ts new file mode 100644 index 00000000..49464888 --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/customer-contact.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { createRequestOption } from 'app/shared'; +import { ICustomerContact } from 'app/shared/model/customer-contact.model'; + +type EntityResponseType = HttpResponse; +type EntityArrayResponseType = HttpResponse; + +@Injectable({ providedIn: 'root' }) +export class CustomerContactService { + public resourceUrl = SERVER_API_URL + 'api/customer-contacts'; + + constructor(protected http: HttpClient) {} + + create(customerContact: ICustomerContact): Observable { + return this.http.post(this.resourceUrl, customerContact, { observe: 'response' }); + } + + update(customerContact: ICustomerContact): Observable { + return this.http.put(this.resourceUrl, customerContact, { observe: 'response' }); + } + + find(id: number): Observable { + return this.http.get(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } + + query(req?: any): Observable { + const options = createRequestOption(req); + return this.http.get(this.resourceUrl, { params: options, observe: 'response' }); + } + + delete(id: number): Observable> { + return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } +} diff --git a/src/main/webapp/app/entities/customer-contact/index.ts b/src/main/webapp/app/entities/customer-contact/index.ts new file mode 100644 index 00000000..9e0cbba0 --- /dev/null +++ b/src/main/webapp/app/entities/customer-contact/index.ts @@ -0,0 +1,6 @@ +export * from './customer-contact.service'; +export * from './customer-contact-update.component'; +export * from './customer-contact-delete-dialog.component'; +export * from './customer-contact-detail.component'; +export * from './customer-contact.component'; +export * from './customer-contact.route'; diff --git a/src/main/webapp/app/entities/customer/customer-delete-dialog.component.html b/src/main/webapp/app/entities/customer/customer-delete-dialog.component.html new file mode 100644 index 00000000..b04a8e62 --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer-delete-dialog.component.html @@ -0,0 +1,19 @@ +
+ + + +
diff --git a/src/main/webapp/app/entities/customer/customer-delete-dialog.component.ts b/src/main/webapp/app/entities/customer/customer-delete-dialog.component.ts new file mode 100644 index 00000000..3c96919d --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer-delete-dialog.component.ts @@ -0,0 +1,65 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { ICustomer } from 'app/shared/model/customer.model'; +import { CustomerService } from './customer.service'; + +@Component({ + selector: 'jhi-customer-delete-dialog', + templateUrl: './customer-delete-dialog.component.html' +}) +export class CustomerDeleteDialogComponent { + customer: ICustomer; + + constructor(protected customerService: CustomerService, public activeModal: NgbActiveModal, protected eventManager: JhiEventManager) {} + + clear() { + this.activeModal.dismiss('cancel'); + } + + confirmDelete(id: number) { + this.customerService.delete(id).subscribe(response => { + this.eventManager.broadcast({ + name: 'customerListModification', + content: 'Deleted an customer' + }); + this.activeModal.dismiss(true); + }); + } +} + +@Component({ + selector: 'jhi-customer-delete-popup', + template: '' +}) +export class CustomerDeletePopupComponent implements OnInit, OnDestroy { + protected ngbModalRef: NgbModalRef; + + constructor(protected activatedRoute: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ customer }) => { + setTimeout(() => { + this.ngbModalRef = this.modalService.open(CustomerDeleteDialogComponent as Component, { size: 'lg', backdrop: 'static' }); + this.ngbModalRef.componentInstance.customer = customer; + this.ngbModalRef.result.then( + result => { + this.router.navigate(['/customer', { outlets: { popup: null } }]); + this.ngbModalRef = null; + }, + reason => { + this.router.navigate(['/customer', { outlets: { popup: null } }]); + this.ngbModalRef = null; + } + ); + }, 0); + }); + } + + ngOnDestroy() { + this.ngbModalRef = null; + } +} diff --git a/src/main/webapp/app/entities/customer/customer-detail.component.html b/src/main/webapp/app/entities/customer/customer-detail.component.html new file mode 100644 index 00000000..9586d033 --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer-detail.component.html @@ -0,0 +1,31 @@ +
+
+
+

Customer {{customer.id}}

+
+ +
+
Number
+
+ {{customer.number}} +
+
Prefix
+
+ {{customer.prefix}} +
+
+ + + + +
+
+
diff --git a/src/main/webapp/app/entities/customer/customer-detail.component.ts b/src/main/webapp/app/entities/customer/customer-detail.component.ts new file mode 100644 index 00000000..da1b94e3 --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer-detail.component.ts @@ -0,0 +1,24 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { ICustomer } from 'app/shared/model/customer.model'; + +@Component({ + selector: 'jhi-customer-detail', + templateUrl: './customer-detail.component.html' +}) +export class CustomerDetailComponent implements OnInit { + customer: ICustomer; + + constructor(protected activatedRoute: ActivatedRoute) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ customer }) => { + this.customer = customer; + }); + } + + previousState() { + window.history.back(); + } +} diff --git a/src/main/webapp/app/entities/customer/customer-update.component.html b/src/main/webapp/app/entities/customer/customer-update.component.html new file mode 100644 index 00000000..7f4e479a --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer-update.component.html @@ -0,0 +1,62 @@ +
+
+
+

Create or edit a Customer

+
+ +
+ + +
+
+ + +
+ + This field is required. + + + This field should be at least 10000. + + + This field cannot be more than 99999. + + + This field should be a number. + +
+
+
+ + +
+ + This field is required. + + + This field should follow pattern for "Prefix". + +
+
+ +
+
+ + +
+
+
+
diff --git a/src/main/webapp/app/entities/customer/customer-update.component.ts b/src/main/webapp/app/entities/customer/customer-update.component.ts new file mode 100644 index 00000000..2afd9d0a --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer-update.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { ICustomer } from 'app/shared/model/customer.model'; +import { CustomerService } from './customer.service'; + +@Component({ + selector: 'jhi-customer-update', + templateUrl: './customer-update.component.html' +}) +export class CustomerUpdateComponent implements OnInit { + customer: ICustomer; + isSaving: boolean; + + constructor(protected customerService: CustomerService, protected activatedRoute: ActivatedRoute) {} + + ngOnInit() { + this.isSaving = false; + this.activatedRoute.data.subscribe(({ customer }) => { + this.customer = customer; + }); + } + + previousState() { + window.history.back(); + } + + save() { + this.isSaving = true; + if (this.customer.id !== undefined) { + this.subscribeToSaveResponse(this.customerService.update(this.customer)); + } else { + this.subscribeToSaveResponse(this.customerService.create(this.customer)); + } + } + + protected subscribeToSaveResponse(result: Observable>) { + result.subscribe((res: HttpResponse) => this.onSaveSuccess(), (res: HttpErrorResponse) => this.onSaveError()); + } + + protected onSaveSuccess() { + this.isSaving = false; + this.previousState(); + } + + protected onSaveError() { + this.isSaving = false; + } +} diff --git a/src/main/webapp/app/entities/customer/customer.component.html b/src/main/webapp/app/entities/customer/customer.component.html new file mode 100644 index 00000000..02824bee --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer.component.html @@ -0,0 +1,56 @@ +
+

+ Customers + +

+ +
+
+ + + + + + + + + + + + + + + + + +
ID Number Prefix
{{customer.id}}{{customer.number}}{{customer.prefix}} +
+ + + +
+
+
+
diff --git a/src/main/webapp/app/entities/customer/customer.component.ts b/src/main/webapp/app/entities/customer/customer.component.ts new file mode 100644 index 00000000..a1d3ce51 --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer.component.ts @@ -0,0 +1,108 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { HttpErrorResponse, HttpHeaders, HttpResponse } from '@angular/common/http'; +import { Subscription } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { JhiEventManager, JhiParseLinks, JhiAlertService } from 'ng-jhipster'; + +import { ICustomer } from 'app/shared/model/customer.model'; +import { AccountService } from 'app/core'; + +import { ITEMS_PER_PAGE } from 'app/shared'; +import { CustomerService } from './customer.service'; + +@Component({ + selector: 'jhi-customer', + templateUrl: './customer.component.html' +}) +export class CustomerComponent implements OnInit, OnDestroy { + customers: ICustomer[]; + currentAccount: any; + eventSubscriber: Subscription; + itemsPerPage: number; + links: any; + page: any; + predicate: any; + reverse: any; + totalItems: number; + + constructor( + protected customerService: CustomerService, + protected jhiAlertService: JhiAlertService, + protected eventManager: JhiEventManager, + protected parseLinks: JhiParseLinks, + protected accountService: AccountService + ) { + this.customers = []; + this.itemsPerPage = ITEMS_PER_PAGE; + this.page = 0; + this.links = { + last: 0 + }; + this.predicate = 'id'; + this.reverse = true; + } + + loadAll() { + this.customerService + .query({ + page: this.page, + size: this.itemsPerPage, + sort: this.sort() + }) + .subscribe( + (res: HttpResponse) => this.paginateCustomers(res.body, res.headers), + (res: HttpErrorResponse) => this.onError(res.message) + ); + } + + reset() { + this.page = 0; + this.customers = []; + this.loadAll(); + } + + loadPage(page) { + this.page = page; + this.loadAll(); + } + + ngOnInit() { + this.loadAll(); + this.accountService.identity().then(account => { + this.currentAccount = account; + }); + this.registerChangeInCustomers(); + } + + ngOnDestroy() { + this.eventManager.destroy(this.eventSubscriber); + } + + trackId(index: number, item: ICustomer) { + return item.id; + } + + registerChangeInCustomers() { + this.eventSubscriber = this.eventManager.subscribe('customerListModification', response => this.reset()); + } + + sort() { + const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; + if (this.predicate !== 'id') { + result.push('id'); + } + return result; + } + + protected paginateCustomers(data: ICustomer[], headers: HttpHeaders) { + this.links = this.parseLinks.parse(headers.get('link')); + this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + for (let i = 0; i < data.length; i++) { + this.customers.push(data[i]); + } + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } +} diff --git a/src/main/webapp/app/entities/customer/customer.module.ts b/src/main/webapp/app/entities/customer/customer.module.ts new file mode 100644 index 00000000..8d50348c --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer.module.ts @@ -0,0 +1,40 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { JhiLanguageService } from 'ng-jhipster'; +import { JhiLanguageHelper } from 'app/core'; + +import { HsadminNgSharedModule } from 'app/shared'; +import { + CustomerComponent, + CustomerDetailComponent, + CustomerUpdateComponent, + CustomerDeletePopupComponent, + CustomerDeleteDialogComponent, + customerRoute, + customerPopupRoute +} from './'; + +const ENTITY_STATES = [...customerRoute, ...customerPopupRoute]; + +@NgModule({ + imports: [HsadminNgSharedModule, RouterModule.forChild(ENTITY_STATES)], + declarations: [ + CustomerComponent, + CustomerDetailComponent, + CustomerUpdateComponent, + CustomerDeleteDialogComponent, + CustomerDeletePopupComponent + ], + entryComponents: [CustomerComponent, CustomerUpdateComponent, CustomerDeleteDialogComponent, CustomerDeletePopupComponent], + providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class HsadminNgCustomerModule { + constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { + this.languageHelper.language.subscribe((languageKey: string) => { + if (languageKey !== undefined) { + this.languageService.changeLanguage(languageKey); + } + }); + } +} diff --git a/src/main/webapp/app/entities/customer/customer.route.ts b/src/main/webapp/app/entities/customer/customer.route.ts new file mode 100644 index 00000000..269760db --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer.route.ts @@ -0,0 +1,93 @@ +import { Injectable } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; +import { UserRouteAccessService } from 'app/core'; +import { Observable, of } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { Customer } from 'app/shared/model/customer.model'; +import { CustomerService } from './customer.service'; +import { CustomerComponent } from './customer.component'; +import { CustomerDetailComponent } from './customer-detail.component'; +import { CustomerUpdateComponent } from './customer-update.component'; +import { CustomerDeletePopupComponent } from './customer-delete-dialog.component'; +import { ICustomer } from 'app/shared/model/customer.model'; + +@Injectable({ providedIn: 'root' }) +export class CustomerResolve implements Resolve { + constructor(private service: CustomerService) {} + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + const id = route.params['id'] ? route.params['id'] : null; + if (id) { + return this.service.find(id).pipe( + filter((response: HttpResponse) => response.ok), + map((customer: HttpResponse) => customer.body) + ); + } + return of(new Customer()); + } +} + +export const customerRoute: Routes = [ + { + path: '', + component: CustomerComponent, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.customer.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/view', + component: CustomerDetailComponent, + resolve: { + customer: CustomerResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.customer.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: 'new', + component: CustomerUpdateComponent, + resolve: { + customer: CustomerResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.customer.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/edit', + component: CustomerUpdateComponent, + resolve: { + customer: CustomerResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.customer.home.title' + }, + canActivate: [UserRouteAccessService] + } +]; + +export const customerPopupRoute: Routes = [ + { + path: ':id/delete', + component: CustomerDeletePopupComponent, + resolve: { + customer: CustomerResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.customer.home.title' + }, + canActivate: [UserRouteAccessService], + outlet: 'popup' + } +]; diff --git a/src/main/webapp/app/entities/customer/customer.service.ts b/src/main/webapp/app/entities/customer/customer.service.ts new file mode 100644 index 00000000..20710286 --- /dev/null +++ b/src/main/webapp/app/entities/customer/customer.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { createRequestOption } from 'app/shared'; +import { ICustomer } from 'app/shared/model/customer.model'; + +type EntityResponseType = HttpResponse; +type EntityArrayResponseType = HttpResponse; + +@Injectable({ providedIn: 'root' }) +export class CustomerService { + public resourceUrl = SERVER_API_URL + 'api/customers'; + + constructor(protected http: HttpClient) {} + + create(customer: ICustomer): Observable { + return this.http.post(this.resourceUrl, customer, { observe: 'response' }); + } + + update(customer: ICustomer): Observable { + return this.http.put(this.resourceUrl, customer, { observe: 'response' }); + } + + find(id: number): Observable { + return this.http.get(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } + + query(req?: any): Observable { + const options = createRequestOption(req); + return this.http.get(this.resourceUrl, { params: options, observe: 'response' }); + } + + delete(id: number): Observable> { + return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } +} diff --git a/src/main/webapp/app/entities/customer/index.ts b/src/main/webapp/app/entities/customer/index.ts new file mode 100644 index 00000000..27ae3ca8 --- /dev/null +++ b/src/main/webapp/app/entities/customer/index.ts @@ -0,0 +1,6 @@ +export * from './customer.service'; +export * from './customer-update.component'; +export * from './customer-delete-dialog.component'; +export * from './customer-detail.component'; +export * from './customer.component'; +export * from './customer.route'; diff --git a/src/main/webapp/app/entities/entity.module.ts b/src/main/webapp/app/entities/entity.module.ts index fed9de39..c0e8ce2c 100644 --- a/src/main/webapp/app/entities/entity.module.ts +++ b/src/main/webapp/app/entities/entity.module.ts @@ -4,6 +4,30 @@ import { RouterModule } from '@angular/router'; @NgModule({ imports: [ RouterModule.forChild([ + { + path: 'customer', + loadChildren: './customer/customer.module#HsadminNgCustomerModule' + }, + { + path: 'contact', + loadChildren: './contact/contact.module#HsadminNgContactModule' + }, + { + path: 'customer-contact', + loadChildren: './customer-contact/customer-contact.module#HsadminNgCustomerContactModule' + }, + { + path: 'membership', + loadChildren: './membership/membership.module#HsadminNgMembershipModule' + }, + { + path: 'share', + loadChildren: './share/share.module#HsadminNgShareModule' + }, + { + path: 'asset', + loadChildren: './asset/asset.module#HsadminNgAssetModule' + } /* jhipster-needle-add-entity-route - JHipster will add entity modules routes here */ ]) ], diff --git a/src/main/webapp/app/entities/membership/index.ts b/src/main/webapp/app/entities/membership/index.ts new file mode 100644 index 00000000..13a7f938 --- /dev/null +++ b/src/main/webapp/app/entities/membership/index.ts @@ -0,0 +1,6 @@ +export * from './membership.service'; +export * from './membership-update.component'; +export * from './membership-delete-dialog.component'; +export * from './membership-detail.component'; +export * from './membership.component'; +export * from './membership.route'; diff --git a/src/main/webapp/app/entities/membership/membership-delete-dialog.component.html b/src/main/webapp/app/entities/membership/membership-delete-dialog.component.html new file mode 100644 index 00000000..8749c4ee --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership-delete-dialog.component.html @@ -0,0 +1,19 @@ +
+ + + +
diff --git a/src/main/webapp/app/entities/membership/membership-delete-dialog.component.ts b/src/main/webapp/app/entities/membership/membership-delete-dialog.component.ts new file mode 100644 index 00000000..ac1787db --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership-delete-dialog.component.ts @@ -0,0 +1,69 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { IMembership } from 'app/shared/model/membership.model'; +import { MembershipService } from './membership.service'; + +@Component({ + selector: 'jhi-membership-delete-dialog', + templateUrl: './membership-delete-dialog.component.html' +}) +export class MembershipDeleteDialogComponent { + membership: IMembership; + + constructor( + protected membershipService: MembershipService, + public activeModal: NgbActiveModal, + protected eventManager: JhiEventManager + ) {} + + clear() { + this.activeModal.dismiss('cancel'); + } + + confirmDelete(id: number) { + this.membershipService.delete(id).subscribe(response => { + this.eventManager.broadcast({ + name: 'membershipListModification', + content: 'Deleted an membership' + }); + this.activeModal.dismiss(true); + }); + } +} + +@Component({ + selector: 'jhi-membership-delete-popup', + template: '' +}) +export class MembershipDeletePopupComponent implements OnInit, OnDestroy { + protected ngbModalRef: NgbModalRef; + + constructor(protected activatedRoute: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ membership }) => { + setTimeout(() => { + this.ngbModalRef = this.modalService.open(MembershipDeleteDialogComponent as Component, { size: 'lg', backdrop: 'static' }); + this.ngbModalRef.componentInstance.membership = membership; + this.ngbModalRef.result.then( + result => { + this.router.navigate(['/membership', { outlets: { popup: null } }]); + this.ngbModalRef = null; + }, + reason => { + this.router.navigate(['/membership', { outlets: { popup: null } }]); + this.ngbModalRef = null; + } + ); + }, 0); + }); + } + + ngOnDestroy() { + this.ngbModalRef = null; + } +} diff --git a/src/main/webapp/app/entities/membership/membership-detail.component.html b/src/main/webapp/app/entities/membership/membership-detail.component.html new file mode 100644 index 00000000..108ef2b7 --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership-detail.component.html @@ -0,0 +1,37 @@ +
+
+
+

Membership {{membership.id}}

+
+ +
+
Since Date
+
+ {{membership.sinceDate}} +
+
Until Date
+
+ {{membership.untilDate}} +
+
Customer
+
+ +
+
+ + + + +
+
+
diff --git a/src/main/webapp/app/entities/membership/membership-detail.component.ts b/src/main/webapp/app/entities/membership/membership-detail.component.ts new file mode 100644 index 00000000..ed1105eb --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership-detail.component.ts @@ -0,0 +1,24 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { IMembership } from 'app/shared/model/membership.model'; + +@Component({ + selector: 'jhi-membership-detail', + templateUrl: './membership-detail.component.html' +}) +export class MembershipDetailComponent implements OnInit { + membership: IMembership; + + constructor(protected activatedRoute: ActivatedRoute) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ membership }) => { + this.membership = membership; + }); + } + + previousState() { + window.history.back(); + } +} diff --git a/src/main/webapp/app/entities/membership/membership-update.component.html b/src/main/webapp/app/entities/membership/membership-update.component.html new file mode 100644 index 00000000..b79731b4 --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership-update.component.html @@ -0,0 +1,57 @@ +
+
+
+

Create or edit a Membership

+
+ +
+ + +
+
+ +
+ + + + +
+
+ + This field is required. + +
+
+
+ +
+ + + + +
+
+ +
+ + +
+
+
+ + +
+
+
+
diff --git a/src/main/webapp/app/entities/membership/membership-update.component.ts b/src/main/webapp/app/entities/membership/membership-update.component.ts new file mode 100644 index 00000000..92d41047 --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership-update.component.ts @@ -0,0 +1,79 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import * as moment from 'moment'; +import { JhiAlertService } from 'ng-jhipster'; +import { IMembership } from 'app/shared/model/membership.model'; +import { MembershipService } from './membership.service'; +import { ICustomer } from 'app/shared/model/customer.model'; +import { CustomerService } from 'app/entities/customer'; + +@Component({ + selector: 'jhi-membership-update', + templateUrl: './membership-update.component.html' +}) +export class MembershipUpdateComponent implements OnInit { + membership: IMembership; + isSaving: boolean; + + customers: ICustomer[]; + sinceDateDp: any; + untilDateDp: any; + + constructor( + protected jhiAlertService: JhiAlertService, + protected membershipService: MembershipService, + protected customerService: CustomerService, + protected activatedRoute: ActivatedRoute + ) {} + + ngOnInit() { + this.isSaving = false; + this.activatedRoute.data.subscribe(({ membership }) => { + this.membership = membership; + }); + this.customerService + .query() + .pipe( + filter((mayBeOk: HttpResponse) => mayBeOk.ok), + map((response: HttpResponse) => response.body) + ) + .subscribe((res: ICustomer[]) => (this.customers = res), (res: HttpErrorResponse) => this.onError(res.message)); + } + + previousState() { + window.history.back(); + } + + save() { + this.isSaving = true; + if (this.membership.id !== undefined) { + this.subscribeToSaveResponse(this.membershipService.update(this.membership)); + } else { + this.subscribeToSaveResponse(this.membershipService.create(this.membership)); + } + } + + protected subscribeToSaveResponse(result: Observable>) { + result.subscribe((res: HttpResponse) => this.onSaveSuccess(), (res: HttpErrorResponse) => this.onSaveError()); + } + + protected onSaveSuccess() { + this.isSaving = false; + this.previousState(); + } + + protected onSaveError() { + this.isSaving = false; + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } + + trackCustomerById(index: number, item: ICustomer) { + return item.id; + } +} diff --git a/src/main/webapp/app/entities/membership/membership.component.html b/src/main/webapp/app/entities/membership/membership.component.html new file mode 100644 index 00000000..075546a4 --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership.component.html @@ -0,0 +1,62 @@ +
+

+ Memberships + +

+ +
+
+ + + + + + + + + + + + + + + + + + + +
ID Since Date Until Date Customer
{{membership.id}}{{membership.sinceDate | date:'mediumDate'}}{{membership.untilDate | date:'mediumDate'}} + + +
+ + + +
+
+
+
diff --git a/src/main/webapp/app/entities/membership/membership.component.ts b/src/main/webapp/app/entities/membership/membership.component.ts new file mode 100644 index 00000000..387df20d --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership.component.ts @@ -0,0 +1,108 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { HttpErrorResponse, HttpHeaders, HttpResponse } from '@angular/common/http'; +import { Subscription } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { JhiEventManager, JhiParseLinks, JhiAlertService } from 'ng-jhipster'; + +import { IMembership } from 'app/shared/model/membership.model'; +import { AccountService } from 'app/core'; + +import { ITEMS_PER_PAGE } from 'app/shared'; +import { MembershipService } from './membership.service'; + +@Component({ + selector: 'jhi-membership', + templateUrl: './membership.component.html' +}) +export class MembershipComponent implements OnInit, OnDestroy { + memberships: IMembership[]; + currentAccount: any; + eventSubscriber: Subscription; + itemsPerPage: number; + links: any; + page: any; + predicate: any; + reverse: any; + totalItems: number; + + constructor( + protected membershipService: MembershipService, + protected jhiAlertService: JhiAlertService, + protected eventManager: JhiEventManager, + protected parseLinks: JhiParseLinks, + protected accountService: AccountService + ) { + this.memberships = []; + this.itemsPerPage = ITEMS_PER_PAGE; + this.page = 0; + this.links = { + last: 0 + }; + this.predicate = 'id'; + this.reverse = true; + } + + loadAll() { + this.membershipService + .query({ + page: this.page, + size: this.itemsPerPage, + sort: this.sort() + }) + .subscribe( + (res: HttpResponse) => this.paginateMemberships(res.body, res.headers), + (res: HttpErrorResponse) => this.onError(res.message) + ); + } + + reset() { + this.page = 0; + this.memberships = []; + this.loadAll(); + } + + loadPage(page) { + this.page = page; + this.loadAll(); + } + + ngOnInit() { + this.loadAll(); + this.accountService.identity().then(account => { + this.currentAccount = account; + }); + this.registerChangeInMemberships(); + } + + ngOnDestroy() { + this.eventManager.destroy(this.eventSubscriber); + } + + trackId(index: number, item: IMembership) { + return item.id; + } + + registerChangeInMemberships() { + this.eventSubscriber = this.eventManager.subscribe('membershipListModification', response => this.reset()); + } + + sort() { + const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; + if (this.predicate !== 'id') { + result.push('id'); + } + return result; + } + + protected paginateMemberships(data: IMembership[], headers: HttpHeaders) { + this.links = this.parseLinks.parse(headers.get('link')); + this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + for (let i = 0; i < data.length; i++) { + this.memberships.push(data[i]); + } + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } +} diff --git a/src/main/webapp/app/entities/membership/membership.module.ts b/src/main/webapp/app/entities/membership/membership.module.ts new file mode 100644 index 00000000..01e0545f --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership.module.ts @@ -0,0 +1,40 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { JhiLanguageService } from 'ng-jhipster'; +import { JhiLanguageHelper } from 'app/core'; + +import { HsadminNgSharedModule } from 'app/shared'; +import { + MembershipComponent, + MembershipDetailComponent, + MembershipUpdateComponent, + MembershipDeletePopupComponent, + MembershipDeleteDialogComponent, + membershipRoute, + membershipPopupRoute +} from './'; + +const ENTITY_STATES = [...membershipRoute, ...membershipPopupRoute]; + +@NgModule({ + imports: [HsadminNgSharedModule, RouterModule.forChild(ENTITY_STATES)], + declarations: [ + MembershipComponent, + MembershipDetailComponent, + MembershipUpdateComponent, + MembershipDeleteDialogComponent, + MembershipDeletePopupComponent + ], + entryComponents: [MembershipComponent, MembershipUpdateComponent, MembershipDeleteDialogComponent, MembershipDeletePopupComponent], + providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class HsadminNgMembershipModule { + constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { + this.languageHelper.language.subscribe((languageKey: string) => { + if (languageKey !== undefined) { + this.languageService.changeLanguage(languageKey); + } + }); + } +} diff --git a/src/main/webapp/app/entities/membership/membership.route.ts b/src/main/webapp/app/entities/membership/membership.route.ts new file mode 100644 index 00000000..fbf9f430 --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership.route.ts @@ -0,0 +1,93 @@ +import { Injectable } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; +import { UserRouteAccessService } from 'app/core'; +import { Observable, of } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { Membership } from 'app/shared/model/membership.model'; +import { MembershipService } from './membership.service'; +import { MembershipComponent } from './membership.component'; +import { MembershipDetailComponent } from './membership-detail.component'; +import { MembershipUpdateComponent } from './membership-update.component'; +import { MembershipDeletePopupComponent } from './membership-delete-dialog.component'; +import { IMembership } from 'app/shared/model/membership.model'; + +@Injectable({ providedIn: 'root' }) +export class MembershipResolve implements Resolve { + constructor(private service: MembershipService) {} + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + const id = route.params['id'] ? route.params['id'] : null; + if (id) { + return this.service.find(id).pipe( + filter((response: HttpResponse) => response.ok), + map((membership: HttpResponse) => membership.body) + ); + } + return of(new Membership()); + } +} + +export const membershipRoute: Routes = [ + { + path: '', + component: MembershipComponent, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.membership.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/view', + component: MembershipDetailComponent, + resolve: { + membership: MembershipResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.membership.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: 'new', + component: MembershipUpdateComponent, + resolve: { + membership: MembershipResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.membership.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/edit', + component: MembershipUpdateComponent, + resolve: { + membership: MembershipResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.membership.home.title' + }, + canActivate: [UserRouteAccessService] + } +]; + +export const membershipPopupRoute: Routes = [ + { + path: ':id/delete', + component: MembershipDeletePopupComponent, + resolve: { + membership: MembershipResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.membership.home.title' + }, + canActivate: [UserRouteAccessService], + outlet: 'popup' + } +]; diff --git a/src/main/webapp/app/entities/membership/membership.service.ts b/src/main/webapp/app/entities/membership/membership.service.ts new file mode 100644 index 00000000..95388263 --- /dev/null +++ b/src/main/webapp/app/entities/membership/membership.service.ts @@ -0,0 +1,77 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import * as moment from 'moment'; +import { DATE_FORMAT } from 'app/shared/constants/input.constants'; +import { map } from 'rxjs/operators'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { createRequestOption } from 'app/shared'; +import { IMembership } from 'app/shared/model/membership.model'; + +type EntityResponseType = HttpResponse; +type EntityArrayResponseType = HttpResponse; + +@Injectable({ providedIn: 'root' }) +export class MembershipService { + public resourceUrl = SERVER_API_URL + 'api/memberships'; + + constructor(protected http: HttpClient) {} + + create(membership: IMembership): Observable { + const copy = this.convertDateFromClient(membership); + return this.http + .post(this.resourceUrl, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + update(membership: IMembership): Observable { + const copy = this.convertDateFromClient(membership); + return this.http + .put(this.resourceUrl, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + find(id: number): Observable { + return this.http + .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + query(req?: any): Observable { + const options = createRequestOption(req); + return this.http + .get(this.resourceUrl, { params: options, observe: 'response' }) + .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); + } + + delete(id: number): Observable> { + return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } + + protected convertDateFromClient(membership: IMembership): IMembership { + const copy: IMembership = Object.assign({}, membership, { + sinceDate: membership.sinceDate != null && membership.sinceDate.isValid() ? membership.sinceDate.format(DATE_FORMAT) : null, + untilDate: membership.untilDate != null && membership.untilDate.isValid() ? membership.untilDate.format(DATE_FORMAT) : null + }); + return copy; + } + + protected convertDateFromServer(res: EntityResponseType): EntityResponseType { + if (res.body) { + res.body.sinceDate = res.body.sinceDate != null ? moment(res.body.sinceDate) : null; + res.body.untilDate = res.body.untilDate != null ? moment(res.body.untilDate) : null; + } + return res; + } + + protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { + if (res.body) { + res.body.forEach((membership: IMembership) => { + membership.sinceDate = membership.sinceDate != null ? moment(membership.sinceDate) : null; + membership.untilDate = membership.untilDate != null ? moment(membership.untilDate) : null; + }); + } + return res; + } +} diff --git a/src/main/webapp/app/entities/share/index.ts b/src/main/webapp/app/entities/share/index.ts new file mode 100644 index 00000000..ecc5eeaa --- /dev/null +++ b/src/main/webapp/app/entities/share/index.ts @@ -0,0 +1,6 @@ +export * from './share.service'; +export * from './share-update.component'; +export * from './share-delete-dialog.component'; +export * from './share-detail.component'; +export * from './share.component'; +export * from './share.route'; diff --git a/src/main/webapp/app/entities/share/share-delete-dialog.component.html b/src/main/webapp/app/entities/share/share-delete-dialog.component.html new file mode 100644 index 00000000..5437602b --- /dev/null +++ b/src/main/webapp/app/entities/share/share-delete-dialog.component.html @@ -0,0 +1,19 @@ +
+ + + +
diff --git a/src/main/webapp/app/entities/share/share-delete-dialog.component.ts b/src/main/webapp/app/entities/share/share-delete-dialog.component.ts new file mode 100644 index 00000000..34138baa --- /dev/null +++ b/src/main/webapp/app/entities/share/share-delete-dialog.component.ts @@ -0,0 +1,65 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { IShare } from 'app/shared/model/share.model'; +import { ShareService } from './share.service'; + +@Component({ + selector: 'jhi-share-delete-dialog', + templateUrl: './share-delete-dialog.component.html' +}) +export class ShareDeleteDialogComponent { + share: IShare; + + constructor(protected shareService: ShareService, public activeModal: NgbActiveModal, protected eventManager: JhiEventManager) {} + + clear() { + this.activeModal.dismiss('cancel'); + } + + confirmDelete(id: number) { + this.shareService.delete(id).subscribe(response => { + this.eventManager.broadcast({ + name: 'shareListModification', + content: 'Deleted an share' + }); + this.activeModal.dismiss(true); + }); + } +} + +@Component({ + selector: 'jhi-share-delete-popup', + template: '' +}) +export class ShareDeletePopupComponent implements OnInit, OnDestroy { + protected ngbModalRef: NgbModalRef; + + constructor(protected activatedRoute: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ share }) => { + setTimeout(() => { + this.ngbModalRef = this.modalService.open(ShareDeleteDialogComponent as Component, { size: 'lg', backdrop: 'static' }); + this.ngbModalRef.componentInstance.share = share; + this.ngbModalRef.result.then( + result => { + this.router.navigate(['/share', { outlets: { popup: null } }]); + this.ngbModalRef = null; + }, + reason => { + this.router.navigate(['/share', { outlets: { popup: null } }]); + this.ngbModalRef = null; + } + ); + }, 0); + }); + } + + ngOnDestroy() { + this.ngbModalRef = null; + } +} diff --git a/src/main/webapp/app/entities/share/share-detail.component.html b/src/main/webapp/app/entities/share/share-detail.component.html new file mode 100644 index 00000000..24ba66c1 --- /dev/null +++ b/src/main/webapp/app/entities/share/share-detail.component.html @@ -0,0 +1,45 @@ +
+
+
+

Share {{share.id}}

+
+ +
+
Date
+
+ {{share.date}} +
+
Action
+
+ {{share.action}} +
+
Quantity
+
+ {{share.quantity}} +
+
Comment
+
+ {{share.comment}} +
+
Member
+
+ +
+
+ + + + +
+
+
diff --git a/src/main/webapp/app/entities/share/share-detail.component.ts b/src/main/webapp/app/entities/share/share-detail.component.ts new file mode 100644 index 00000000..5cd2ed0f --- /dev/null +++ b/src/main/webapp/app/entities/share/share-detail.component.ts @@ -0,0 +1,24 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { IShare } from 'app/shared/model/share.model'; + +@Component({ + selector: 'jhi-share-detail', + templateUrl: './share-detail.component.html' +}) +export class ShareDetailComponent implements OnInit { + share: IShare; + + constructor(protected activatedRoute: ActivatedRoute) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ share }) => { + this.share = share; + }); + } + + previousState() { + window.history.back(); + } +} diff --git a/src/main/webapp/app/entities/share/share-update.component.html b/src/main/webapp/app/entities/share/share-update.component.html new file mode 100644 index 00000000..ef655308 --- /dev/null +++ b/src/main/webapp/app/entities/share/share-update.component.html @@ -0,0 +1,86 @@ +
+
+
+

Create or edit a Share

+
+ +
+ + +
+
+ +
+ + + + +
+
+ + This field is required. + +
+
+
+ + +
+ + This field is required. + +
+
+
+ + +
+ + This field is required. + + + This field should be a number. + +
+
+
+ + +
+ + This field cannot be longer than 160 characters. + +
+
+ +
+ + +
+
+
+ + +
+
+
+
diff --git a/src/main/webapp/app/entities/share/share-update.component.ts b/src/main/webapp/app/entities/share/share-update.component.ts new file mode 100644 index 00000000..677a033c --- /dev/null +++ b/src/main/webapp/app/entities/share/share-update.component.ts @@ -0,0 +1,78 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import * as moment from 'moment'; +import { JhiAlertService } from 'ng-jhipster'; +import { IShare } from 'app/shared/model/share.model'; +import { ShareService } from './share.service'; +import { IMembership } from 'app/shared/model/membership.model'; +import { MembershipService } from 'app/entities/membership'; + +@Component({ + selector: 'jhi-share-update', + templateUrl: './share-update.component.html' +}) +export class ShareUpdateComponent implements OnInit { + share: IShare; + isSaving: boolean; + + memberships: IMembership[]; + dateDp: any; + + constructor( + protected jhiAlertService: JhiAlertService, + protected shareService: ShareService, + protected membershipService: MembershipService, + protected activatedRoute: ActivatedRoute + ) {} + + ngOnInit() { + this.isSaving = false; + this.activatedRoute.data.subscribe(({ share }) => { + this.share = share; + }); + this.membershipService + .query() + .pipe( + filter((mayBeOk: HttpResponse) => mayBeOk.ok), + map((response: HttpResponse) => response.body) + ) + .subscribe((res: IMembership[]) => (this.memberships = res), (res: HttpErrorResponse) => this.onError(res.message)); + } + + previousState() { + window.history.back(); + } + + save() { + this.isSaving = true; + if (this.share.id !== undefined) { + this.subscribeToSaveResponse(this.shareService.update(this.share)); + } else { + this.subscribeToSaveResponse(this.shareService.create(this.share)); + } + } + + protected subscribeToSaveResponse(result: Observable>) { + result.subscribe((res: HttpResponse) => this.onSaveSuccess(), (res: HttpErrorResponse) => this.onSaveError()); + } + + protected onSaveSuccess() { + this.isSaving = false; + this.previousState(); + } + + protected onSaveError() { + this.isSaving = false; + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } + + trackMembershipById(index: number, item: IMembership) { + return item.id; + } +} diff --git a/src/main/webapp/app/entities/share/share.component.html b/src/main/webapp/app/entities/share/share.component.html new file mode 100644 index 00000000..82cead44 --- /dev/null +++ b/src/main/webapp/app/entities/share/share.component.html @@ -0,0 +1,66 @@ +
+

+ Shares + +

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
ID Date Action Quantity Comment Member
{{share.id}}{{share.date | date:'mediumDate'}}{{share.action}}{{share.quantity}}{{share.comment}} + + +
+ + + +
+
+
+
diff --git a/src/main/webapp/app/entities/share/share.component.ts b/src/main/webapp/app/entities/share/share.component.ts new file mode 100644 index 00000000..d636295f --- /dev/null +++ b/src/main/webapp/app/entities/share/share.component.ts @@ -0,0 +1,108 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { HttpErrorResponse, HttpHeaders, HttpResponse } from '@angular/common/http'; +import { Subscription } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { JhiEventManager, JhiParseLinks, JhiAlertService } from 'ng-jhipster'; + +import { IShare } from 'app/shared/model/share.model'; +import { AccountService } from 'app/core'; + +import { ITEMS_PER_PAGE } from 'app/shared'; +import { ShareService } from './share.service'; + +@Component({ + selector: 'jhi-share', + templateUrl: './share.component.html' +}) +export class ShareComponent implements OnInit, OnDestroy { + shares: IShare[]; + currentAccount: any; + eventSubscriber: Subscription; + itemsPerPage: number; + links: any; + page: any; + predicate: any; + reverse: any; + totalItems: number; + + constructor( + protected shareService: ShareService, + protected jhiAlertService: JhiAlertService, + protected eventManager: JhiEventManager, + protected parseLinks: JhiParseLinks, + protected accountService: AccountService + ) { + this.shares = []; + this.itemsPerPage = ITEMS_PER_PAGE; + this.page = 0; + this.links = { + last: 0 + }; + this.predicate = 'id'; + this.reverse = true; + } + + loadAll() { + this.shareService + .query({ + page: this.page, + size: this.itemsPerPage, + sort: this.sort() + }) + .subscribe( + (res: HttpResponse) => this.paginateShares(res.body, res.headers), + (res: HttpErrorResponse) => this.onError(res.message) + ); + } + + reset() { + this.page = 0; + this.shares = []; + this.loadAll(); + } + + loadPage(page) { + this.page = page; + this.loadAll(); + } + + ngOnInit() { + this.loadAll(); + this.accountService.identity().then(account => { + this.currentAccount = account; + }); + this.registerChangeInShares(); + } + + ngOnDestroy() { + this.eventManager.destroy(this.eventSubscriber); + } + + trackId(index: number, item: IShare) { + return item.id; + } + + registerChangeInShares() { + this.eventSubscriber = this.eventManager.subscribe('shareListModification', response => this.reset()); + } + + sort() { + const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; + if (this.predicate !== 'id') { + result.push('id'); + } + return result; + } + + protected paginateShares(data: IShare[], headers: HttpHeaders) { + this.links = this.parseLinks.parse(headers.get('link')); + this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + for (let i = 0; i < data.length; i++) { + this.shares.push(data[i]); + } + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } +} diff --git a/src/main/webapp/app/entities/share/share.module.ts b/src/main/webapp/app/entities/share/share.module.ts new file mode 100644 index 00000000..9fb07b3a --- /dev/null +++ b/src/main/webapp/app/entities/share/share.module.ts @@ -0,0 +1,34 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { JhiLanguageService } from 'ng-jhipster'; +import { JhiLanguageHelper } from 'app/core'; + +import { HsadminNgSharedModule } from 'app/shared'; +import { + ShareComponent, + ShareDetailComponent, + ShareUpdateComponent, + ShareDeletePopupComponent, + ShareDeleteDialogComponent, + shareRoute, + sharePopupRoute +} from './'; + +const ENTITY_STATES = [...shareRoute, ...sharePopupRoute]; + +@NgModule({ + imports: [HsadminNgSharedModule, RouterModule.forChild(ENTITY_STATES)], + declarations: [ShareComponent, ShareDetailComponent, ShareUpdateComponent, ShareDeleteDialogComponent, ShareDeletePopupComponent], + entryComponents: [ShareComponent, ShareUpdateComponent, ShareDeleteDialogComponent, ShareDeletePopupComponent], + providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class HsadminNgShareModule { + constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { + this.languageHelper.language.subscribe((languageKey: string) => { + if (languageKey !== undefined) { + this.languageService.changeLanguage(languageKey); + } + }); + } +} diff --git a/src/main/webapp/app/entities/share/share.route.ts b/src/main/webapp/app/entities/share/share.route.ts new file mode 100644 index 00000000..36f35a5b --- /dev/null +++ b/src/main/webapp/app/entities/share/share.route.ts @@ -0,0 +1,93 @@ +import { Injectable } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; +import { UserRouteAccessService } from 'app/core'; +import { Observable, of } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { Share } from 'app/shared/model/share.model'; +import { ShareService } from './share.service'; +import { ShareComponent } from './share.component'; +import { ShareDetailComponent } from './share-detail.component'; +import { ShareUpdateComponent } from './share-update.component'; +import { ShareDeletePopupComponent } from './share-delete-dialog.component'; +import { IShare } from 'app/shared/model/share.model'; + +@Injectable({ providedIn: 'root' }) +export class ShareResolve implements Resolve { + constructor(private service: ShareService) {} + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + const id = route.params['id'] ? route.params['id'] : null; + if (id) { + return this.service.find(id).pipe( + filter((response: HttpResponse) => response.ok), + map((share: HttpResponse) => share.body) + ); + } + return of(new Share()); + } +} + +export const shareRoute: Routes = [ + { + path: '', + component: ShareComponent, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.share.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/view', + component: ShareDetailComponent, + resolve: { + share: ShareResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.share.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: 'new', + component: ShareUpdateComponent, + resolve: { + share: ShareResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.share.home.title' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/edit', + component: ShareUpdateComponent, + resolve: { + share: ShareResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.share.home.title' + }, + canActivate: [UserRouteAccessService] + } +]; + +export const sharePopupRoute: Routes = [ + { + path: ':id/delete', + component: ShareDeletePopupComponent, + resolve: { + share: ShareResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'hsadminNgApp.share.home.title' + }, + canActivate: [UserRouteAccessService], + outlet: 'popup' + } +]; diff --git a/src/main/webapp/app/entities/share/share.service.ts b/src/main/webapp/app/entities/share/share.service.ts new file mode 100644 index 00000000..4b9389b3 --- /dev/null +++ b/src/main/webapp/app/entities/share/share.service.ts @@ -0,0 +1,74 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import * as moment from 'moment'; +import { DATE_FORMAT } from 'app/shared/constants/input.constants'; +import { map } from 'rxjs/operators'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { createRequestOption } from 'app/shared'; +import { IShare } from 'app/shared/model/share.model'; + +type EntityResponseType = HttpResponse; +type EntityArrayResponseType = HttpResponse; + +@Injectable({ providedIn: 'root' }) +export class ShareService { + public resourceUrl = SERVER_API_URL + 'api/shares'; + + constructor(protected http: HttpClient) {} + + create(share: IShare): Observable { + const copy = this.convertDateFromClient(share); + return this.http + .post(this.resourceUrl, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + update(share: IShare): Observable { + const copy = this.convertDateFromClient(share); + return this.http + .put(this.resourceUrl, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + find(id: number): Observable { + return this.http + .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + query(req?: any): Observable { + const options = createRequestOption(req); + return this.http + .get(this.resourceUrl, { params: options, observe: 'response' }) + .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); + } + + delete(id: number): Observable> { + return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } + + protected convertDateFromClient(share: IShare): IShare { + const copy: IShare = Object.assign({}, share, { + date: share.date != null && share.date.isValid() ? share.date.format(DATE_FORMAT) : null + }); + return copy; + } + + protected convertDateFromServer(res: EntityResponseType): EntityResponseType { + if (res.body) { + res.body.date = res.body.date != null ? moment(res.body.date) : null; + } + return res; + } + + protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { + if (res.body) { + res.body.forEach((share: IShare) => { + share.date = share.date != null ? moment(share.date) : null; + }); + } + return res; + } +} diff --git a/src/main/webapp/app/layouts/navbar/navbar.component.html b/src/main/webapp/app/layouts/navbar/navbar.component.html index c6c63c64..201ff3aa 100644 --- a/src/main/webapp/app/layouts/navbar/navbar.component.html +++ b/src/main/webapp/app/layouts/navbar/navbar.component.html @@ -27,6 +27,42 @@ diff --git a/src/main/webapp/app/shared/model/asset.model.ts b/src/main/webapp/app/shared/model/asset.model.ts new file mode 100644 index 00000000..aa577d11 --- /dev/null +++ b/src/main/webapp/app/shared/model/asset.model.ts @@ -0,0 +1,30 @@ +import { Moment } from 'moment'; + +export const enum AssetAction { + PAYMENT = 'PAYMENT', + HANDOVER = 'HANDOVER', + ADOPTION = 'ADOPTION', + LOSS = 'LOSS', + CLEARING = 'CLEARING', + PAYBACK = 'PAYBACK' +} + +export interface IAsset { + id?: number; + date?: Moment; + action?: AssetAction; + amount?: number; + comment?: string; + memberId?: number; +} + +export class Asset implements IAsset { + constructor( + public id?: number, + public date?: Moment, + public action?: AssetAction, + public amount?: number, + public comment?: string, + public memberId?: number + ) {} +} diff --git a/src/main/webapp/app/shared/model/contact.model.ts b/src/main/webapp/app/shared/model/contact.model.ts new file mode 100644 index 00000000..8c02a4a2 --- /dev/null +++ b/src/main/webapp/app/shared/model/contact.model.ts @@ -0,0 +1,19 @@ +import { ICustomerContact } from 'app/shared/model/customer-contact.model'; + +export interface IContact { + id?: number; + firstName?: string; + lastName?: string; + email?: string; + roles?: ICustomerContact[]; +} + +export class Contact implements IContact { + constructor( + public id?: number, + public firstName?: string, + public lastName?: string, + public email?: string, + public roles?: ICustomerContact[] + ) {} +} diff --git a/src/main/webapp/app/shared/model/customer-contact.model.ts b/src/main/webapp/app/shared/model/customer-contact.model.ts new file mode 100644 index 00000000..c1d3f274 --- /dev/null +++ b/src/main/webapp/app/shared/model/customer-contact.model.ts @@ -0,0 +1,25 @@ +export const enum CustomerContactRole { + CONTRACTUAL = 'CONTRACTUAL', + TECHNICAL = 'TECHNICAL', + FINANCIAL = 'FINANCIAL' +} + +export interface ICustomerContact { + id?: number; + role?: CustomerContactRole; + contactEmail?: string; + contactId?: number; + customerPrefix?: string; + customerId?: number; +} + +export class CustomerContact implements ICustomerContact { + constructor( + public id?: number, + public role?: CustomerContactRole, + public contactEmail?: string, + public contactId?: number, + public customerPrefix?: string, + public customerId?: number + ) {} +} diff --git a/src/main/webapp/app/shared/model/customer.model.ts b/src/main/webapp/app/shared/model/customer.model.ts new file mode 100644 index 00000000..01b5809d --- /dev/null +++ b/src/main/webapp/app/shared/model/customer.model.ts @@ -0,0 +1,20 @@ +import { IMembership } from 'app/shared/model/membership.model'; +import { ICustomerContact } from 'app/shared/model/customer-contact.model'; + +export interface ICustomer { + id?: number; + number?: number; + prefix?: string; + memberships?: IMembership[]; + roles?: ICustomerContact[]; +} + +export class Customer implements ICustomer { + constructor( + public id?: number, + public number?: number, + public prefix?: string, + public memberships?: IMembership[], + public roles?: ICustomerContact[] + ) {} +} diff --git a/src/main/webapp/app/shared/model/membership.model.ts b/src/main/webapp/app/shared/model/membership.model.ts new file mode 100644 index 00000000..f1ad5337 --- /dev/null +++ b/src/main/webapp/app/shared/model/membership.model.ts @@ -0,0 +1,25 @@ +import { Moment } from 'moment'; +import { IShare } from 'app/shared/model/share.model'; +import { IAsset } from 'app/shared/model/asset.model'; + +export interface IMembership { + id?: number; + sinceDate?: Moment; + untilDate?: Moment; + shares?: IShare[]; + assets?: IAsset[]; + customerPrefix?: string; + customerId?: number; +} + +export class Membership implements IMembership { + constructor( + public id?: number, + public sinceDate?: Moment, + public untilDate?: Moment, + public shares?: IShare[], + public assets?: IAsset[], + public customerPrefix?: string, + public customerId?: number + ) {} +} diff --git a/src/main/webapp/app/shared/model/share.model.ts b/src/main/webapp/app/shared/model/share.model.ts new file mode 100644 index 00000000..c3eb8cce --- /dev/null +++ b/src/main/webapp/app/shared/model/share.model.ts @@ -0,0 +1,26 @@ +import { Moment } from 'moment'; + +export const enum ShareAction { + SUBSCRIPTION = 'SUBSCRIPTION', + CANCELLATION = 'CANCELLATION' +} + +export interface IShare { + id?: number; + date?: Moment; + action?: ShareAction; + quantity?: number; + comment?: string; + memberId?: number; +} + +export class Share implements IShare { + constructor( + public id?: number, + public date?: Moment, + public action?: ShareAction, + public quantity?: number, + public comment?: string, + public memberId?: number + ) {} +} diff --git a/src/main/webapp/i18n/de/asset.json b/src/main/webapp/i18n/de/asset.json new file mode 100644 index 00000000..8f36a53f --- /dev/null +++ b/src/main/webapp/i18n/de/asset.json @@ -0,0 +1,25 @@ +{ + "hsadminNgApp": { + "asset": { + "home": { + "title": "Assets", + "createLabel": "Asset erstellen", + "createOrEditLabel": "Asset erstellen oder bearbeiten" + }, + "created": "Asset erstellt mit ID {{ param }}", + "updated": "Asset aktualisiert mit ID {{ param }}", + "deleted": "Asset gelöscht mit ID {{ param }}", + "delete": { + "question": "Soll Asset {{ id }} wirklich dauerhaft gelöscht werden?" + }, + "detail": { + "title": "Asset" + }, + "date": "Date", + "action": "Action", + "amount": "Amount", + "comment": "Comment", + "member": "Member" + } + } +} diff --git a/src/main/webapp/i18n/de/assetAction.json b/src/main/webapp/i18n/de/assetAction.json new file mode 100644 index 00000000..d3f1ca77 --- /dev/null +++ b/src/main/webapp/i18n/de/assetAction.json @@ -0,0 +1,13 @@ +{ + "hsadminNgApp": { + "AssetAction": { + "null": "", + "PAYMENT": "PAYMENT", + "HANDOVER": "HANDOVER", + "ADOPTION": "ADOPTION", + "LOSS": "LOSS", + "CLEARING": "CLEARING", + "PAYBACK": "PAYBACK" + } + } +} diff --git a/src/main/webapp/i18n/de/contact.json b/src/main/webapp/i18n/de/contact.json new file mode 100644 index 00000000..521243c6 --- /dev/null +++ b/src/main/webapp/i18n/de/contact.json @@ -0,0 +1,24 @@ +{ + "hsadminNgApp": { + "contact": { + "home": { + "title": "Contacts", + "createLabel": "Contact erstellen", + "createOrEditLabel": "Contact erstellen oder bearbeiten" + }, + "created": "Contact erstellt mit ID {{ param }}", + "updated": "Contact aktualisiert mit ID {{ param }}", + "deleted": "Contact gelöscht mit ID {{ param }}", + "delete": { + "question": "Soll Contact {{ id }} wirklich dauerhaft gelöscht werden?" + }, + "detail": { + "title": "Contact" + }, + "firstName": "First Name", + "lastName": "Last Name", + "email": "Email", + "role": "Role" + } + } +} diff --git a/src/main/webapp/i18n/de/customer.json b/src/main/webapp/i18n/de/customer.json new file mode 100644 index 00000000..05bb4b11 --- /dev/null +++ b/src/main/webapp/i18n/de/customer.json @@ -0,0 +1,24 @@ +{ + "hsadminNgApp": { + "customer": { + "home": { + "title": "Customers", + "createLabel": "Customer erstellen", + "createOrEditLabel": "Customer erstellen oder bearbeiten" + }, + "created": "Customer erstellt mit ID {{ param }}", + "updated": "Customer aktualisiert mit ID {{ param }}", + "deleted": "Customer gelöscht mit ID {{ param }}", + "delete": { + "question": "Soll Customer {{ id }} wirklich dauerhaft gelöscht werden?" + }, + "detail": { + "title": "Customer" + }, + "number": "Number", + "prefix": "Prefix", + "membership": "Membership", + "role": "Role" + } + } +} diff --git a/src/main/webapp/i18n/de/customerContact.json b/src/main/webapp/i18n/de/customerContact.json new file mode 100644 index 00000000..4f5b69d9 --- /dev/null +++ b/src/main/webapp/i18n/de/customerContact.json @@ -0,0 +1,23 @@ +{ + "hsadminNgApp": { + "customerContact": { + "home": { + "title": "Customer Contacts", + "createLabel": "Customer Contact erstellen", + "createOrEditLabel": "Customer Contact erstellen oder bearbeiten" + }, + "created": "Customer Contact erstellt mit ID {{ param }}", + "updated": "Customer Contact aktualisiert mit ID {{ param }}", + "deleted": "Customer Contact gelöscht mit ID {{ param }}", + "delete": { + "question": "Soll Customer Contact {{ id }} wirklich dauerhaft gelöscht werden?" + }, + "detail": { + "title": "Customer Contact" + }, + "role": "Role", + "contact": "Contact", + "customer": "Customer" + } + } +} diff --git a/src/main/webapp/i18n/de/customerContactRole.json b/src/main/webapp/i18n/de/customerContactRole.json new file mode 100644 index 00000000..7e654646 --- /dev/null +++ b/src/main/webapp/i18n/de/customerContactRole.json @@ -0,0 +1,10 @@ +{ + "hsadminNgApp": { + "CustomerContactRole": { + "null": "", + "CONTRACTUAL": "CONTRACTUAL", + "TECHNICAL": "TECHNICAL", + "FINANCIAL": "FINANCIAL" + } + } +} diff --git a/src/main/webapp/i18n/de/global.json b/src/main/webapp/i18n/de/global.json index 58d44f23..f6ef880f 100644 --- a/src/main/webapp/i18n/de/global.json +++ b/src/main/webapp/i18n/de/global.json @@ -7,6 +7,12 @@ "jhipster-needle-menu-add-element": "JHipster will add additional menu entries here (do not translate!)", "entities": { "main": "Entitäten", + "customer": "Customer", + "contact": "Contact", + "customerContact": "Customer Contact", + "membership": "Membership", + "share": "Share", + "asset": "Asset", "jhipster-needle-menu-add-entry": "JHipster will add additional entities here (do not translate!)" }, "account": { diff --git a/src/main/webapp/i18n/de/membership.json b/src/main/webapp/i18n/de/membership.json new file mode 100644 index 00000000..95fb3f58 --- /dev/null +++ b/src/main/webapp/i18n/de/membership.json @@ -0,0 +1,25 @@ +{ + "hsadminNgApp": { + "membership": { + "home": { + "title": "Memberships", + "createLabel": "Membership erstellen", + "createOrEditLabel": "Membership erstellen oder bearbeiten" + }, + "created": "Membership erstellt mit ID {{ param }}", + "updated": "Membership aktualisiert mit ID {{ param }}", + "deleted": "Membership gelöscht mit ID {{ param }}", + "delete": { + "question": "Soll Membership {{ id }} wirklich dauerhaft gelöscht werden?" + }, + "detail": { + "title": "Membership" + }, + "sinceDate": "Since Date", + "untilDate": "Until Date", + "share": "Share", + "asset": "Asset", + "customer": "Customer" + } + } +} diff --git a/src/main/webapp/i18n/de/share.json b/src/main/webapp/i18n/de/share.json new file mode 100644 index 00000000..702f8f83 --- /dev/null +++ b/src/main/webapp/i18n/de/share.json @@ -0,0 +1,25 @@ +{ + "hsadminNgApp": { + "share": { + "home": { + "title": "Shares", + "createLabel": "Share erstellen", + "createOrEditLabel": "Share erstellen oder bearbeiten" + }, + "created": "Share erstellt mit ID {{ param }}", + "updated": "Share aktualisiert mit ID {{ param }}", + "deleted": "Share gelöscht mit ID {{ param }}", + "delete": { + "question": "Soll Share {{ id }} wirklich dauerhaft gelöscht werden?" + }, + "detail": { + "title": "Share" + }, + "date": "Date", + "action": "Action", + "quantity": "Quantity", + "comment": "Comment", + "member": "Member" + } + } +} diff --git a/src/main/webapp/i18n/de/shareAction.json b/src/main/webapp/i18n/de/shareAction.json new file mode 100644 index 00000000..2016c4bb --- /dev/null +++ b/src/main/webapp/i18n/de/shareAction.json @@ -0,0 +1,9 @@ +{ + "hsadminNgApp": { + "ShareAction": { + "null": "", + "SUBSCRIPTION": "SUBSCRIPTION", + "CANCELLATION": "CANCELLATION" + } + } +} diff --git a/src/main/webapp/i18n/en/asset.json b/src/main/webapp/i18n/en/asset.json new file mode 100644 index 00000000..128f5716 --- /dev/null +++ b/src/main/webapp/i18n/en/asset.json @@ -0,0 +1,25 @@ +{ + "hsadminNgApp": { + "asset": { + "home": { + "title": "Assets", + "createLabel": "Create a new Asset", + "createOrEditLabel": "Create or edit a Asset" + }, + "created": "A new Asset is created with identifier {{ param }}", + "updated": "A Asset is updated with identifier {{ param }}", + "deleted": "A Asset is deleted with identifier {{ param }}", + "delete": { + "question": "Are you sure you want to delete Asset {{ id }}?" + }, + "detail": { + "title": "Asset" + }, + "date": "Date", + "action": "Action", + "amount": "Amount", + "comment": "Comment", + "member": "Member" + } + } +} diff --git a/src/main/webapp/i18n/en/assetAction.json b/src/main/webapp/i18n/en/assetAction.json new file mode 100644 index 00000000..d3f1ca77 --- /dev/null +++ b/src/main/webapp/i18n/en/assetAction.json @@ -0,0 +1,13 @@ +{ + "hsadminNgApp": { + "AssetAction": { + "null": "", + "PAYMENT": "PAYMENT", + "HANDOVER": "HANDOVER", + "ADOPTION": "ADOPTION", + "LOSS": "LOSS", + "CLEARING": "CLEARING", + "PAYBACK": "PAYBACK" + } + } +} diff --git a/src/main/webapp/i18n/en/contact.json b/src/main/webapp/i18n/en/contact.json new file mode 100644 index 00000000..680664c7 --- /dev/null +++ b/src/main/webapp/i18n/en/contact.json @@ -0,0 +1,24 @@ +{ + "hsadminNgApp": { + "contact": { + "home": { + "title": "Contacts", + "createLabel": "Create a new Contact", + "createOrEditLabel": "Create or edit a Contact" + }, + "created": "A new Contact is created with identifier {{ param }}", + "updated": "A Contact is updated with identifier {{ param }}", + "deleted": "A Contact is deleted with identifier {{ param }}", + "delete": { + "question": "Are you sure you want to delete Contact {{ id }}?" + }, + "detail": { + "title": "Contact" + }, + "firstName": "First Name", + "lastName": "Last Name", + "email": "Email", + "role": "Role" + } + } +} diff --git a/src/main/webapp/i18n/en/customer.json b/src/main/webapp/i18n/en/customer.json new file mode 100644 index 00000000..ea94a291 --- /dev/null +++ b/src/main/webapp/i18n/en/customer.json @@ -0,0 +1,24 @@ +{ + "hsadminNgApp": { + "customer": { + "home": { + "title": "Customers", + "createLabel": "Create a new Customer", + "createOrEditLabel": "Create or edit a Customer" + }, + "created": "A new Customer is created with identifier {{ param }}", + "updated": "A Customer is updated with identifier {{ param }}", + "deleted": "A Customer is deleted with identifier {{ param }}", + "delete": { + "question": "Are you sure you want to delete Customer {{ id }}?" + }, + "detail": { + "title": "Customer" + }, + "number": "Number", + "prefix": "Prefix", + "membership": "Membership", + "role": "Role" + } + } +} diff --git a/src/main/webapp/i18n/en/customerContact.json b/src/main/webapp/i18n/en/customerContact.json new file mode 100644 index 00000000..57173ebd --- /dev/null +++ b/src/main/webapp/i18n/en/customerContact.json @@ -0,0 +1,23 @@ +{ + "hsadminNgApp": { + "customerContact": { + "home": { + "title": "Customer Contacts", + "createLabel": "Create a new Customer Contact", + "createOrEditLabel": "Create or edit a Customer Contact" + }, + "created": "A new Customer Contact is created with identifier {{ param }}", + "updated": "A Customer Contact is updated with identifier {{ param }}", + "deleted": "A Customer Contact is deleted with identifier {{ param }}", + "delete": { + "question": "Are you sure you want to delete Customer Contact {{ id }}?" + }, + "detail": { + "title": "Customer Contact" + }, + "role": "Role", + "contact": "Contact", + "customer": "Customer" + } + } +} diff --git a/src/main/webapp/i18n/en/customerContactRole.json b/src/main/webapp/i18n/en/customerContactRole.json new file mode 100644 index 00000000..7e654646 --- /dev/null +++ b/src/main/webapp/i18n/en/customerContactRole.json @@ -0,0 +1,10 @@ +{ + "hsadminNgApp": { + "CustomerContactRole": { + "null": "", + "CONTRACTUAL": "CONTRACTUAL", + "TECHNICAL": "TECHNICAL", + "FINANCIAL": "FINANCIAL" + } + } +} diff --git a/src/main/webapp/i18n/en/global.json b/src/main/webapp/i18n/en/global.json index e0927808..3b496f5b 100644 --- a/src/main/webapp/i18n/en/global.json +++ b/src/main/webapp/i18n/en/global.json @@ -7,6 +7,12 @@ "jhipster-needle-menu-add-element": "JHipster will add additional menu entries here (do not translate!)", "entities": { "main": "Entities", + "customer": "Customer", + "contact": "Contact", + "customerContact": "Customer Contact", + "membership": "Membership", + "share": "Share", + "asset": "Asset", "jhipster-needle-menu-add-entry": "JHipster will add additional entities here (do not translate!)" }, "account": { diff --git a/src/main/webapp/i18n/en/membership.json b/src/main/webapp/i18n/en/membership.json new file mode 100644 index 00000000..08b7f156 --- /dev/null +++ b/src/main/webapp/i18n/en/membership.json @@ -0,0 +1,25 @@ +{ + "hsadminNgApp": { + "membership": { + "home": { + "title": "Memberships", + "createLabel": "Create a new Membership", + "createOrEditLabel": "Create or edit a Membership" + }, + "created": "A new Membership is created with identifier {{ param }}", + "updated": "A Membership is updated with identifier {{ param }}", + "deleted": "A Membership is deleted with identifier {{ param }}", + "delete": { + "question": "Are you sure you want to delete Membership {{ id }}?" + }, + "detail": { + "title": "Membership" + }, + "sinceDate": "Since Date", + "untilDate": "Until Date", + "share": "Share", + "asset": "Asset", + "customer": "Customer" + } + } +} diff --git a/src/main/webapp/i18n/en/share.json b/src/main/webapp/i18n/en/share.json new file mode 100644 index 00000000..06637120 --- /dev/null +++ b/src/main/webapp/i18n/en/share.json @@ -0,0 +1,25 @@ +{ + "hsadminNgApp": { + "share": { + "home": { + "title": "Shares", + "createLabel": "Create a new Share", + "createOrEditLabel": "Create or edit a Share" + }, + "created": "A new Share is created with identifier {{ param }}", + "updated": "A Share is updated with identifier {{ param }}", + "deleted": "A Share is deleted with identifier {{ param }}", + "delete": { + "question": "Are you sure you want to delete Share {{ id }}?" + }, + "detail": { + "title": "Share" + }, + "date": "Date", + "action": "Action", + "quantity": "Quantity", + "comment": "Comment", + "member": "Member" + } + } +} diff --git a/src/main/webapp/i18n/en/shareAction.json b/src/main/webapp/i18n/en/shareAction.json new file mode 100644 index 00000000..2016c4bb --- /dev/null +++ b/src/main/webapp/i18n/en/shareAction.json @@ -0,0 +1,9 @@ +{ + "hsadminNgApp": { + "ShareAction": { + "null": "", + "SUBSCRIPTION": "SUBSCRIPTION", + "CANCELLATION": "CANCELLATION" + } + } +} diff --git a/src/test/java/org/hostsharing/hsadminng/web/rest/AssetResourceIntTest.java b/src/test/java/org/hostsharing/hsadminng/web/rest/AssetResourceIntTest.java new file mode 100644 index 00000000..568a561a --- /dev/null +++ b/src/test/java/org/hostsharing/hsadminng/web/rest/AssetResourceIntTest.java @@ -0,0 +1,616 @@ +package org.hostsharing.hsadminng.web.rest; + +import org.hostsharing.hsadminng.HsadminNgApp; + +import org.hostsharing.hsadminng.domain.Asset; +import org.hostsharing.hsadminng.domain.Membership; +import org.hostsharing.hsadminng.repository.AssetRepository; +import org.hostsharing.hsadminng.service.AssetService; +import org.hostsharing.hsadminng.service.dto.AssetDTO; +import org.hostsharing.hsadminng.service.mapper.AssetMapper; +import org.hostsharing.hsadminng.web.rest.errors.ExceptionTranslator; +import org.hostsharing.hsadminng.service.dto.AssetCriteria; +import org.hostsharing.hsadminng.service.AssetQueryService; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.Validator; + +import javax.persistence.EntityManager; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.List; + + +import static org.hostsharing.hsadminng.web.rest.TestUtil.createFormattingConversionService; +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.hostsharing.hsadminng.domain.enumeration.AssetAction; +/** + * Test class for the AssetResource REST controller. + * + * @see AssetResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = HsadminNgApp.class) +public class AssetResourceIntTest { + + private static final LocalDate DEFAULT_DATE = LocalDate.ofEpochDay(0L); + private static final LocalDate UPDATED_DATE = LocalDate.now(ZoneId.systemDefault()); + + private static final AssetAction DEFAULT_ACTION = AssetAction.PAYMENT; + private static final AssetAction UPDATED_ACTION = AssetAction.HANDOVER; + + private static final BigDecimal DEFAULT_AMOUNT = new BigDecimal(1); + private static final BigDecimal UPDATED_AMOUNT = new BigDecimal(2); + + private static final String DEFAULT_COMMENT = "AAAAAAAAAA"; + private static final String UPDATED_COMMENT = "BBBBBBBBBB"; + + @Autowired + private AssetRepository assetRepository; + + @Autowired + private AssetMapper assetMapper; + + @Autowired + private AssetService assetService; + + @Autowired + private AssetQueryService assetQueryService; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private EntityManager em; + + @Autowired + private Validator validator; + + private MockMvc restAssetMockMvc; + + private Asset asset; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + final AssetResource assetResource = new AssetResource(assetService, assetQueryService); + this.restAssetMockMvc = MockMvcBuilders.standaloneSetup(assetResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setControllerAdvice(exceptionTranslator) + .setConversionService(createFormattingConversionService()) + .setMessageConverters(jacksonMessageConverter) + .setValidator(validator).build(); + } + + /** + * Create an entity for this test. + * + * This is a static method, as tests for other entities might also need it, + * if they test an entity which requires the current entity. + */ + public static Asset createEntity(EntityManager em) { + Asset asset = new Asset() + .date(DEFAULT_DATE) + .action(DEFAULT_ACTION) + .amount(DEFAULT_AMOUNT) + .comment(DEFAULT_COMMENT); + return asset; + } + + @Before + public void initTest() { + asset = createEntity(em); + } + + @Test + @Transactional + public void createAsset() throws Exception { + int databaseSizeBeforeCreate = assetRepository.findAll().size(); + + // Create the Asset + AssetDTO assetDTO = assetMapper.toDto(asset); + restAssetMockMvc.perform(post("/api/assets") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(assetDTO))) + .andExpect(status().isCreated()); + + // Validate the Asset in the database + List assetList = assetRepository.findAll(); + assertThat(assetList).hasSize(databaseSizeBeforeCreate + 1); + Asset testAsset = assetList.get(assetList.size() - 1); + assertThat(testAsset.getDate()).isEqualTo(DEFAULT_DATE); + assertThat(testAsset.getAction()).isEqualTo(DEFAULT_ACTION); + assertThat(testAsset.getAmount()).isEqualTo(DEFAULT_AMOUNT); + assertThat(testAsset.getComment()).isEqualTo(DEFAULT_COMMENT); + } + + @Test + @Transactional + public void createAssetWithExistingId() throws Exception { + int databaseSizeBeforeCreate = assetRepository.findAll().size(); + + // Create the Asset with an existing ID + asset.setId(1L); + AssetDTO assetDTO = assetMapper.toDto(asset); + + // An entity with an existing ID cannot be created, so this API call must fail + restAssetMockMvc.perform(post("/api/assets") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(assetDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Asset in the database + List assetList = assetRepository.findAll(); + assertThat(assetList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void checkDateIsRequired() throws Exception { + int databaseSizeBeforeTest = assetRepository.findAll().size(); + // set the field null + asset.setDate(null); + + // Create the Asset, which fails. + AssetDTO assetDTO = assetMapper.toDto(asset); + + restAssetMockMvc.perform(post("/api/assets") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(assetDTO))) + .andExpect(status().isBadRequest()); + + List assetList = assetRepository.findAll(); + assertThat(assetList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkActionIsRequired() throws Exception { + int databaseSizeBeforeTest = assetRepository.findAll().size(); + // set the field null + asset.setAction(null); + + // Create the Asset, which fails. + AssetDTO assetDTO = assetMapper.toDto(asset); + + restAssetMockMvc.perform(post("/api/assets") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(assetDTO))) + .andExpect(status().isBadRequest()); + + List assetList = assetRepository.findAll(); + assertThat(assetList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkAmountIsRequired() throws Exception { + int databaseSizeBeforeTest = assetRepository.findAll().size(); + // set the field null + asset.setAmount(null); + + // Create the Asset, which fails. + AssetDTO assetDTO = assetMapper.toDto(asset); + + restAssetMockMvc.perform(post("/api/assets") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(assetDTO))) + .andExpect(status().isBadRequest()); + + List assetList = assetRepository.findAll(); + assertThat(assetList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void getAllAssets() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList + restAssetMockMvc.perform(get("/api/assets?sort=id,desc")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(asset.getId().intValue()))) + .andExpect(jsonPath("$.[*].date").value(hasItem(DEFAULT_DATE.toString()))) + .andExpect(jsonPath("$.[*].action").value(hasItem(DEFAULT_ACTION.toString()))) + .andExpect(jsonPath("$.[*].amount").value(hasItem(DEFAULT_AMOUNT.intValue()))) + .andExpect(jsonPath("$.[*].comment").value(hasItem(DEFAULT_COMMENT.toString()))); + } + + @Test + @Transactional + public void getAsset() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get the asset + restAssetMockMvc.perform(get("/api/assets/{id}", asset.getId())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.id").value(asset.getId().intValue())) + .andExpect(jsonPath("$.date").value(DEFAULT_DATE.toString())) + .andExpect(jsonPath("$.action").value(DEFAULT_ACTION.toString())) + .andExpect(jsonPath("$.amount").value(DEFAULT_AMOUNT.intValue())) + .andExpect(jsonPath("$.comment").value(DEFAULT_COMMENT.toString())); + } + + @Test + @Transactional + public void getAllAssetsByDateIsEqualToSomething() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where date equals to DEFAULT_DATE + defaultAssetShouldBeFound("date.equals=" + DEFAULT_DATE); + + // Get all the assetList where date equals to UPDATED_DATE + defaultAssetShouldNotBeFound("date.equals=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllAssetsByDateIsInShouldWork() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where date in DEFAULT_DATE or UPDATED_DATE + defaultAssetShouldBeFound("date.in=" + DEFAULT_DATE + "," + UPDATED_DATE); + + // Get all the assetList where date equals to UPDATED_DATE + defaultAssetShouldNotBeFound("date.in=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllAssetsByDateIsNullOrNotNull() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where date is not null + defaultAssetShouldBeFound("date.specified=true"); + + // Get all the assetList where date is null + defaultAssetShouldNotBeFound("date.specified=false"); + } + + @Test + @Transactional + public void getAllAssetsByDateIsGreaterThanOrEqualToSomething() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where date greater than or equals to DEFAULT_DATE + defaultAssetShouldBeFound("date.greaterOrEqualThan=" + DEFAULT_DATE); + + // Get all the assetList where date greater than or equals to UPDATED_DATE + defaultAssetShouldNotBeFound("date.greaterOrEqualThan=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllAssetsByDateIsLessThanSomething() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where date less than or equals to DEFAULT_DATE + defaultAssetShouldNotBeFound("date.lessThan=" + DEFAULT_DATE); + + // Get all the assetList where date less than or equals to UPDATED_DATE + defaultAssetShouldBeFound("date.lessThan=" + UPDATED_DATE); + } + + + @Test + @Transactional + public void getAllAssetsByActionIsEqualToSomething() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where action equals to DEFAULT_ACTION + defaultAssetShouldBeFound("action.equals=" + DEFAULT_ACTION); + + // Get all the assetList where action equals to UPDATED_ACTION + defaultAssetShouldNotBeFound("action.equals=" + UPDATED_ACTION); + } + + @Test + @Transactional + public void getAllAssetsByActionIsInShouldWork() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where action in DEFAULT_ACTION or UPDATED_ACTION + defaultAssetShouldBeFound("action.in=" + DEFAULT_ACTION + "," + UPDATED_ACTION); + + // Get all the assetList where action equals to UPDATED_ACTION + defaultAssetShouldNotBeFound("action.in=" + UPDATED_ACTION); + } + + @Test + @Transactional + public void getAllAssetsByActionIsNullOrNotNull() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where action is not null + defaultAssetShouldBeFound("action.specified=true"); + + // Get all the assetList where action is null + defaultAssetShouldNotBeFound("action.specified=false"); + } + + @Test + @Transactional + public void getAllAssetsByAmountIsEqualToSomething() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where amount equals to DEFAULT_AMOUNT + defaultAssetShouldBeFound("amount.equals=" + DEFAULT_AMOUNT); + + // Get all the assetList where amount equals to UPDATED_AMOUNT + defaultAssetShouldNotBeFound("amount.equals=" + UPDATED_AMOUNT); + } + + @Test + @Transactional + public void getAllAssetsByAmountIsInShouldWork() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where amount in DEFAULT_AMOUNT or UPDATED_AMOUNT + defaultAssetShouldBeFound("amount.in=" + DEFAULT_AMOUNT + "," + UPDATED_AMOUNT); + + // Get all the assetList where amount equals to UPDATED_AMOUNT + defaultAssetShouldNotBeFound("amount.in=" + UPDATED_AMOUNT); + } + + @Test + @Transactional + public void getAllAssetsByAmountIsNullOrNotNull() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where amount is not null + defaultAssetShouldBeFound("amount.specified=true"); + + // Get all the assetList where amount is null + defaultAssetShouldNotBeFound("amount.specified=false"); + } + + @Test + @Transactional + public void getAllAssetsByCommentIsEqualToSomething() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where comment equals to DEFAULT_COMMENT + defaultAssetShouldBeFound("comment.equals=" + DEFAULT_COMMENT); + + // Get all the assetList where comment equals to UPDATED_COMMENT + defaultAssetShouldNotBeFound("comment.equals=" + UPDATED_COMMENT); + } + + @Test + @Transactional + public void getAllAssetsByCommentIsInShouldWork() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where comment in DEFAULT_COMMENT or UPDATED_COMMENT + defaultAssetShouldBeFound("comment.in=" + DEFAULT_COMMENT + "," + UPDATED_COMMENT); + + // Get all the assetList where comment equals to UPDATED_COMMENT + defaultAssetShouldNotBeFound("comment.in=" + UPDATED_COMMENT); + } + + @Test + @Transactional + public void getAllAssetsByCommentIsNullOrNotNull() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + // Get all the assetList where comment is not null + defaultAssetShouldBeFound("comment.specified=true"); + + // Get all the assetList where comment is null + defaultAssetShouldNotBeFound("comment.specified=false"); + } + + @Test + @Transactional + public void getAllAssetsByMemberIsEqualToSomething() throws Exception { + // Initialize the database + Membership member = MembershipResourceIntTest.createEntity(em); + em.persist(member); + em.flush(); + asset.setMember(member); + assetRepository.saveAndFlush(asset); + Long memberId = member.getId(); + + // Get all the assetList where member equals to memberId + defaultAssetShouldBeFound("memberId.equals=" + memberId); + + // Get all the assetList where member equals to memberId + 1 + defaultAssetShouldNotBeFound("memberId.equals=" + (memberId + 1)); + } + + /** + * Executes the search, and checks that the default entity is returned + */ + private void defaultAssetShouldBeFound(String filter) throws Exception { + restAssetMockMvc.perform(get("/api/assets?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(asset.getId().intValue()))) + .andExpect(jsonPath("$.[*].date").value(hasItem(DEFAULT_DATE.toString()))) + .andExpect(jsonPath("$.[*].action").value(hasItem(DEFAULT_ACTION.toString()))) + .andExpect(jsonPath("$.[*].amount").value(hasItem(DEFAULT_AMOUNT.intValue()))) + .andExpect(jsonPath("$.[*].comment").value(hasItem(DEFAULT_COMMENT))); + + // Check, that the count call also returns 1 + restAssetMockMvc.perform(get("/api/assets/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("1")); + } + + /** + * Executes the search, and checks that the default entity is not returned + */ + private void defaultAssetShouldNotBeFound(String filter) throws Exception { + restAssetMockMvc.perform(get("/api/assets?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$").isEmpty()); + + // Check, that the count call also returns 0 + restAssetMockMvc.perform(get("/api/assets/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("0")); + } + + + @Test + @Transactional + public void getNonExistingAsset() throws Exception { + // Get the asset + restAssetMockMvc.perform(get("/api/assets/{id}", Long.MAX_VALUE)) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void updateAsset() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + int databaseSizeBeforeUpdate = assetRepository.findAll().size(); + + // Update the asset + Asset updatedAsset = assetRepository.findById(asset.getId()).get(); + // Disconnect from session so that the updates on updatedAsset are not directly saved in db + em.detach(updatedAsset); + updatedAsset + .date(UPDATED_DATE) + .action(UPDATED_ACTION) + .amount(UPDATED_AMOUNT) + .comment(UPDATED_COMMENT); + AssetDTO assetDTO = assetMapper.toDto(updatedAsset); + + restAssetMockMvc.perform(put("/api/assets") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(assetDTO))) + .andExpect(status().isOk()); + + // Validate the Asset in the database + List assetList = assetRepository.findAll(); + assertThat(assetList).hasSize(databaseSizeBeforeUpdate); + Asset testAsset = assetList.get(assetList.size() - 1); + assertThat(testAsset.getDate()).isEqualTo(UPDATED_DATE); + assertThat(testAsset.getAction()).isEqualTo(UPDATED_ACTION); + assertThat(testAsset.getAmount()).isEqualTo(UPDATED_AMOUNT); + assertThat(testAsset.getComment()).isEqualTo(UPDATED_COMMENT); + } + + @Test + @Transactional + public void updateNonExistingAsset() throws Exception { + int databaseSizeBeforeUpdate = assetRepository.findAll().size(); + + // Create the Asset + AssetDTO assetDTO = assetMapper.toDto(asset); + + // If the entity doesn't have an ID, it will throw BadRequestAlertException + restAssetMockMvc.perform(put("/api/assets") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(assetDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Asset in the database + List assetList = assetRepository.findAll(); + assertThat(assetList).hasSize(databaseSizeBeforeUpdate); + } + + @Test + @Transactional + public void deleteAsset() throws Exception { + // Initialize the database + assetRepository.saveAndFlush(asset); + + int databaseSizeBeforeDelete = assetRepository.findAll().size(); + + // Delete the asset + restAssetMockMvc.perform(delete("/api/assets/{id}", asset.getId()) + .accept(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()); + + // Validate the database is empty + List assetList = assetRepository.findAll(); + assertThat(assetList).hasSize(databaseSizeBeforeDelete - 1); + } + + @Test + @Transactional + public void equalsVerifier() throws Exception { + TestUtil.equalsVerifier(Asset.class); + Asset asset1 = new Asset(); + asset1.setId(1L); + Asset asset2 = new Asset(); + asset2.setId(asset1.getId()); + assertThat(asset1).isEqualTo(asset2); + asset2.setId(2L); + assertThat(asset1).isNotEqualTo(asset2); + asset1.setId(null); + assertThat(asset1).isNotEqualTo(asset2); + } + + @Test + @Transactional + public void dtoEqualsVerifier() throws Exception { + TestUtil.equalsVerifier(AssetDTO.class); + AssetDTO assetDTO1 = new AssetDTO(); + assetDTO1.setId(1L); + AssetDTO assetDTO2 = new AssetDTO(); + assertThat(assetDTO1).isNotEqualTo(assetDTO2); + assetDTO2.setId(assetDTO1.getId()); + assertThat(assetDTO1).isEqualTo(assetDTO2); + assetDTO2.setId(2L); + assertThat(assetDTO1).isNotEqualTo(assetDTO2); + assetDTO1.setId(null); + assertThat(assetDTO1).isNotEqualTo(assetDTO2); + } + + @Test + @Transactional + public void testEntityFromId() { + assertThat(assetMapper.fromId(42L).getId()).isEqualTo(42); + assertThat(assetMapper.fromId(null)).isNull(); + } +} diff --git a/src/test/java/org/hostsharing/hsadminng/web/rest/ContactResourceIntTest.java b/src/test/java/org/hostsharing/hsadminng/web/rest/ContactResourceIntTest.java new file mode 100644 index 00000000..724a06c3 --- /dev/null +++ b/src/test/java/org/hostsharing/hsadminng/web/rest/ContactResourceIntTest.java @@ -0,0 +1,536 @@ +package org.hostsharing.hsadminng.web.rest; + +import org.hostsharing.hsadminng.HsadminNgApp; + +import org.hostsharing.hsadminng.domain.Contact; +import org.hostsharing.hsadminng.domain.CustomerContact; +import org.hostsharing.hsadminng.repository.ContactRepository; +import org.hostsharing.hsadminng.service.ContactService; +import org.hostsharing.hsadminng.service.dto.ContactDTO; +import org.hostsharing.hsadminng.service.mapper.ContactMapper; +import org.hostsharing.hsadminng.web.rest.errors.ExceptionTranslator; +import org.hostsharing.hsadminng.service.dto.ContactCriteria; +import org.hostsharing.hsadminng.service.ContactQueryService; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.Validator; + +import javax.persistence.EntityManager; +import java.util.List; + + +import static org.hostsharing.hsadminng.web.rest.TestUtil.createFormattingConversionService; +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Test class for the ContactResource REST controller. + * + * @see ContactResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = HsadminNgApp.class) +public class ContactResourceIntTest { + + private static final String DEFAULT_FIRST_NAME = "AAAAAAAAAA"; + private static final String UPDATED_FIRST_NAME = "BBBBBBBBBB"; + + private static final String DEFAULT_LAST_NAME = "AAAAAAAAAA"; + private static final String UPDATED_LAST_NAME = "BBBBBBBBBB"; + + private static final String DEFAULT_EMAIL = "AAAAAAAAAA"; + private static final String UPDATED_EMAIL = "BBBBBBBBBB"; + + @Autowired + private ContactRepository contactRepository; + + @Autowired + private ContactMapper contactMapper; + + @Autowired + private ContactService contactService; + + @Autowired + private ContactQueryService contactQueryService; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private EntityManager em; + + @Autowired + private Validator validator; + + private MockMvc restContactMockMvc; + + private Contact contact; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + final ContactResource contactResource = new ContactResource(contactService, contactQueryService); + this.restContactMockMvc = MockMvcBuilders.standaloneSetup(contactResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setControllerAdvice(exceptionTranslator) + .setConversionService(createFormattingConversionService()) + .setMessageConverters(jacksonMessageConverter) + .setValidator(validator).build(); + } + + /** + * Create an entity for this test. + * + * This is a static method, as tests for other entities might also need it, + * if they test an entity which requires the current entity. + */ + public static Contact createEntity(EntityManager em) { + Contact contact = new Contact() + .firstName(DEFAULT_FIRST_NAME) + .lastName(DEFAULT_LAST_NAME) + .email(DEFAULT_EMAIL); + return contact; + } + + @Before + public void initTest() { + contact = createEntity(em); + } + + @Test + @Transactional + public void createContact() throws Exception { + int databaseSizeBeforeCreate = contactRepository.findAll().size(); + + // Create the Contact + ContactDTO contactDTO = contactMapper.toDto(contact); + restContactMockMvc.perform(post("/api/contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(contactDTO))) + .andExpect(status().isCreated()); + + // Validate the Contact in the database + List contactList = contactRepository.findAll(); + assertThat(contactList).hasSize(databaseSizeBeforeCreate + 1); + Contact testContact = contactList.get(contactList.size() - 1); + assertThat(testContact.getFirstName()).isEqualTo(DEFAULT_FIRST_NAME); + assertThat(testContact.getLastName()).isEqualTo(DEFAULT_LAST_NAME); + assertThat(testContact.getEmail()).isEqualTo(DEFAULT_EMAIL); + } + + @Test + @Transactional + public void createContactWithExistingId() throws Exception { + int databaseSizeBeforeCreate = contactRepository.findAll().size(); + + // Create the Contact with an existing ID + contact.setId(1L); + ContactDTO contactDTO = contactMapper.toDto(contact); + + // An entity with an existing ID cannot be created, so this API call must fail + restContactMockMvc.perform(post("/api/contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(contactDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Contact in the database + List contactList = contactRepository.findAll(); + assertThat(contactList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void checkFirstNameIsRequired() throws Exception { + int databaseSizeBeforeTest = contactRepository.findAll().size(); + // set the field null + contact.setFirstName(null); + + // Create the Contact, which fails. + ContactDTO contactDTO = contactMapper.toDto(contact); + + restContactMockMvc.perform(post("/api/contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(contactDTO))) + .andExpect(status().isBadRequest()); + + List contactList = contactRepository.findAll(); + assertThat(contactList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkLastNameIsRequired() throws Exception { + int databaseSizeBeforeTest = contactRepository.findAll().size(); + // set the field null + contact.setLastName(null); + + // Create the Contact, which fails. + ContactDTO contactDTO = contactMapper.toDto(contact); + + restContactMockMvc.perform(post("/api/contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(contactDTO))) + .andExpect(status().isBadRequest()); + + List contactList = contactRepository.findAll(); + assertThat(contactList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkEmailIsRequired() throws Exception { + int databaseSizeBeforeTest = contactRepository.findAll().size(); + // set the field null + contact.setEmail(null); + + // Create the Contact, which fails. + ContactDTO contactDTO = contactMapper.toDto(contact); + + restContactMockMvc.perform(post("/api/contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(contactDTO))) + .andExpect(status().isBadRequest()); + + List contactList = contactRepository.findAll(); + assertThat(contactList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void getAllContacts() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get all the contactList + restContactMockMvc.perform(get("/api/contacts?sort=id,desc")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(contact.getId().intValue()))) + .andExpect(jsonPath("$.[*].firstName").value(hasItem(DEFAULT_FIRST_NAME.toString()))) + .andExpect(jsonPath("$.[*].lastName").value(hasItem(DEFAULT_LAST_NAME.toString()))) + .andExpect(jsonPath("$.[*].email").value(hasItem(DEFAULT_EMAIL.toString()))); + } + + @Test + @Transactional + public void getContact() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get the contact + restContactMockMvc.perform(get("/api/contacts/{id}", contact.getId())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.id").value(contact.getId().intValue())) + .andExpect(jsonPath("$.firstName").value(DEFAULT_FIRST_NAME.toString())) + .andExpect(jsonPath("$.lastName").value(DEFAULT_LAST_NAME.toString())) + .andExpect(jsonPath("$.email").value(DEFAULT_EMAIL.toString())); + } + + @Test + @Transactional + public void getAllContactsByFirstNameIsEqualToSomething() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get all the contactList where firstName equals to DEFAULT_FIRST_NAME + defaultContactShouldBeFound("firstName.equals=" + DEFAULT_FIRST_NAME); + + // Get all the contactList where firstName equals to UPDATED_FIRST_NAME + defaultContactShouldNotBeFound("firstName.equals=" + UPDATED_FIRST_NAME); + } + + @Test + @Transactional + public void getAllContactsByFirstNameIsInShouldWork() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get all the contactList where firstName in DEFAULT_FIRST_NAME or UPDATED_FIRST_NAME + defaultContactShouldBeFound("firstName.in=" + DEFAULT_FIRST_NAME + "," + UPDATED_FIRST_NAME); + + // Get all the contactList where firstName equals to UPDATED_FIRST_NAME + defaultContactShouldNotBeFound("firstName.in=" + UPDATED_FIRST_NAME); + } + + @Test + @Transactional + public void getAllContactsByFirstNameIsNullOrNotNull() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get all the contactList where firstName is not null + defaultContactShouldBeFound("firstName.specified=true"); + + // Get all the contactList where firstName is null + defaultContactShouldNotBeFound("firstName.specified=false"); + } + + @Test + @Transactional + public void getAllContactsByLastNameIsEqualToSomething() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get all the contactList where lastName equals to DEFAULT_LAST_NAME + defaultContactShouldBeFound("lastName.equals=" + DEFAULT_LAST_NAME); + + // Get all the contactList where lastName equals to UPDATED_LAST_NAME + defaultContactShouldNotBeFound("lastName.equals=" + UPDATED_LAST_NAME); + } + + @Test + @Transactional + public void getAllContactsByLastNameIsInShouldWork() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get all the contactList where lastName in DEFAULT_LAST_NAME or UPDATED_LAST_NAME + defaultContactShouldBeFound("lastName.in=" + DEFAULT_LAST_NAME + "," + UPDATED_LAST_NAME); + + // Get all the contactList where lastName equals to UPDATED_LAST_NAME + defaultContactShouldNotBeFound("lastName.in=" + UPDATED_LAST_NAME); + } + + @Test + @Transactional + public void getAllContactsByLastNameIsNullOrNotNull() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get all the contactList where lastName is not null + defaultContactShouldBeFound("lastName.specified=true"); + + // Get all the contactList where lastName is null + defaultContactShouldNotBeFound("lastName.specified=false"); + } + + @Test + @Transactional + public void getAllContactsByEmailIsEqualToSomething() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get all the contactList where email equals to DEFAULT_EMAIL + defaultContactShouldBeFound("email.equals=" + DEFAULT_EMAIL); + + // Get all the contactList where email equals to UPDATED_EMAIL + defaultContactShouldNotBeFound("email.equals=" + UPDATED_EMAIL); + } + + @Test + @Transactional + public void getAllContactsByEmailIsInShouldWork() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get all the contactList where email in DEFAULT_EMAIL or UPDATED_EMAIL + defaultContactShouldBeFound("email.in=" + DEFAULT_EMAIL + "," + UPDATED_EMAIL); + + // Get all the contactList where email equals to UPDATED_EMAIL + defaultContactShouldNotBeFound("email.in=" + UPDATED_EMAIL); + } + + @Test + @Transactional + public void getAllContactsByEmailIsNullOrNotNull() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + // Get all the contactList where email is not null + defaultContactShouldBeFound("email.specified=true"); + + // Get all the contactList where email is null + defaultContactShouldNotBeFound("email.specified=false"); + } + + @Test + @Transactional + public void getAllContactsByRoleIsEqualToSomething() throws Exception { + // Initialize the database + CustomerContact role = CustomerContactResourceIntTest.createEntity(em); + em.persist(role); + em.flush(); + contact.addRole(role); + contactRepository.saveAndFlush(contact); + Long roleId = role.getId(); + + // Get all the contactList where role equals to roleId + defaultContactShouldBeFound("roleId.equals=" + roleId); + + // Get all the contactList where role equals to roleId + 1 + defaultContactShouldNotBeFound("roleId.equals=" + (roleId + 1)); + } + + /** + * Executes the search, and checks that the default entity is returned + */ + private void defaultContactShouldBeFound(String filter) throws Exception { + restContactMockMvc.perform(get("/api/contacts?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(contact.getId().intValue()))) + .andExpect(jsonPath("$.[*].firstName").value(hasItem(DEFAULT_FIRST_NAME))) + .andExpect(jsonPath("$.[*].lastName").value(hasItem(DEFAULT_LAST_NAME))) + .andExpect(jsonPath("$.[*].email").value(hasItem(DEFAULT_EMAIL))); + + // Check, that the count call also returns 1 + restContactMockMvc.perform(get("/api/contacts/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("1")); + } + + /** + * Executes the search, and checks that the default entity is not returned + */ + private void defaultContactShouldNotBeFound(String filter) throws Exception { + restContactMockMvc.perform(get("/api/contacts?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$").isEmpty()); + + // Check, that the count call also returns 0 + restContactMockMvc.perform(get("/api/contacts/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("0")); + } + + + @Test + @Transactional + public void getNonExistingContact() throws Exception { + // Get the contact + restContactMockMvc.perform(get("/api/contacts/{id}", Long.MAX_VALUE)) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void updateContact() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + int databaseSizeBeforeUpdate = contactRepository.findAll().size(); + + // Update the contact + Contact updatedContact = contactRepository.findById(contact.getId()).get(); + // Disconnect from session so that the updates on updatedContact are not directly saved in db + em.detach(updatedContact); + updatedContact + .firstName(UPDATED_FIRST_NAME) + .lastName(UPDATED_LAST_NAME) + .email(UPDATED_EMAIL); + ContactDTO contactDTO = contactMapper.toDto(updatedContact); + + restContactMockMvc.perform(put("/api/contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(contactDTO))) + .andExpect(status().isOk()); + + // Validate the Contact in the database + List contactList = contactRepository.findAll(); + assertThat(contactList).hasSize(databaseSizeBeforeUpdate); + Contact testContact = contactList.get(contactList.size() - 1); + assertThat(testContact.getFirstName()).isEqualTo(UPDATED_FIRST_NAME); + assertThat(testContact.getLastName()).isEqualTo(UPDATED_LAST_NAME); + assertThat(testContact.getEmail()).isEqualTo(UPDATED_EMAIL); + } + + @Test + @Transactional + public void updateNonExistingContact() throws Exception { + int databaseSizeBeforeUpdate = contactRepository.findAll().size(); + + // Create the Contact + ContactDTO contactDTO = contactMapper.toDto(contact); + + // If the entity doesn't have an ID, it will throw BadRequestAlertException + restContactMockMvc.perform(put("/api/contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(contactDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Contact in the database + List contactList = contactRepository.findAll(); + assertThat(contactList).hasSize(databaseSizeBeforeUpdate); + } + + @Test + @Transactional + public void deleteContact() throws Exception { + // Initialize the database + contactRepository.saveAndFlush(contact); + + int databaseSizeBeforeDelete = contactRepository.findAll().size(); + + // Delete the contact + restContactMockMvc.perform(delete("/api/contacts/{id}", contact.getId()) + .accept(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()); + + // Validate the database is empty + List contactList = contactRepository.findAll(); + assertThat(contactList).hasSize(databaseSizeBeforeDelete - 1); + } + + @Test + @Transactional + public void equalsVerifier() throws Exception { + TestUtil.equalsVerifier(Contact.class); + Contact contact1 = new Contact(); + contact1.setId(1L); + Contact contact2 = new Contact(); + contact2.setId(contact1.getId()); + assertThat(contact1).isEqualTo(contact2); + contact2.setId(2L); + assertThat(contact1).isNotEqualTo(contact2); + contact1.setId(null); + assertThat(contact1).isNotEqualTo(contact2); + } + + @Test + @Transactional + public void dtoEqualsVerifier() throws Exception { + TestUtil.equalsVerifier(ContactDTO.class); + ContactDTO contactDTO1 = new ContactDTO(); + contactDTO1.setId(1L); + ContactDTO contactDTO2 = new ContactDTO(); + assertThat(contactDTO1).isNotEqualTo(contactDTO2); + contactDTO2.setId(contactDTO1.getId()); + assertThat(contactDTO1).isEqualTo(contactDTO2); + contactDTO2.setId(2L); + assertThat(contactDTO1).isNotEqualTo(contactDTO2); + contactDTO1.setId(null); + assertThat(contactDTO1).isNotEqualTo(contactDTO2); + } + + @Test + @Transactional + public void testEntityFromId() { + assertThat(contactMapper.fromId(42L).getId()).isEqualTo(42); + assertThat(contactMapper.fromId(null)).isNull(); + } +} diff --git a/src/test/java/org/hostsharing/hsadminng/web/rest/CustomerContactResourceIntTest.java b/src/test/java/org/hostsharing/hsadminng/web/rest/CustomerContactResourceIntTest.java new file mode 100644 index 00000000..04097ed1 --- /dev/null +++ b/src/test/java/org/hostsharing/hsadminng/web/rest/CustomerContactResourceIntTest.java @@ -0,0 +1,431 @@ +package org.hostsharing.hsadminng.web.rest; + +import org.hostsharing.hsadminng.HsadminNgApp; + +import org.hostsharing.hsadminng.domain.CustomerContact; +import org.hostsharing.hsadminng.domain.Contact; +import org.hostsharing.hsadminng.domain.Customer; +import org.hostsharing.hsadminng.repository.CustomerContactRepository; +import org.hostsharing.hsadminng.service.CustomerContactService; +import org.hostsharing.hsadminng.service.dto.CustomerContactDTO; +import org.hostsharing.hsadminng.service.mapper.CustomerContactMapper; +import org.hostsharing.hsadminng.web.rest.errors.ExceptionTranslator; +import org.hostsharing.hsadminng.service.dto.CustomerContactCriteria; +import org.hostsharing.hsadminng.service.CustomerContactQueryService; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.Validator; + +import javax.persistence.EntityManager; +import java.util.List; + + +import static org.hostsharing.hsadminng.web.rest.TestUtil.createFormattingConversionService; +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.hostsharing.hsadminng.domain.enumeration.CustomerContactRole; +/** + * Test class for the CustomerContactResource REST controller. + * + * @see CustomerContactResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = HsadminNgApp.class) +public class CustomerContactResourceIntTest { + + private static final CustomerContactRole DEFAULT_ROLE = CustomerContactRole.CONTRACTUAL; + private static final CustomerContactRole UPDATED_ROLE = CustomerContactRole.TECHNICAL; + + @Autowired + private CustomerContactRepository customerContactRepository; + + @Autowired + private CustomerContactMapper customerContactMapper; + + @Autowired + private CustomerContactService customerContactService; + + @Autowired + private CustomerContactQueryService customerContactQueryService; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private EntityManager em; + + @Autowired + private Validator validator; + + private MockMvc restCustomerContactMockMvc; + + private CustomerContact customerContact; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + final CustomerContactResource customerContactResource = new CustomerContactResource(customerContactService, customerContactQueryService); + this.restCustomerContactMockMvc = MockMvcBuilders.standaloneSetup(customerContactResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setControllerAdvice(exceptionTranslator) + .setConversionService(createFormattingConversionService()) + .setMessageConverters(jacksonMessageConverter) + .setValidator(validator).build(); + } + + /** + * Create an entity for this test. + * + * This is a static method, as tests for other entities might also need it, + * if they test an entity which requires the current entity. + */ + public static CustomerContact createEntity(EntityManager em) { + CustomerContact customerContact = new CustomerContact() + .role(DEFAULT_ROLE); + // Add required entity + Contact contact = ContactResourceIntTest.createEntity(em); + em.persist(contact); + em.flush(); + customerContact.setContact(contact); + // Add required entity + Customer customer = CustomerResourceIntTest.createEntity(em); + em.persist(customer); + em.flush(); + customerContact.setCustomer(customer); + return customerContact; + } + + @Before + public void initTest() { + customerContact = createEntity(em); + } + + @Test + @Transactional + public void createCustomerContact() throws Exception { + int databaseSizeBeforeCreate = customerContactRepository.findAll().size(); + + // Create the CustomerContact + CustomerContactDTO customerContactDTO = customerContactMapper.toDto(customerContact); + restCustomerContactMockMvc.perform(post("/api/customer-contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerContactDTO))) + .andExpect(status().isCreated()); + + // Validate the CustomerContact in the database + List customerContactList = customerContactRepository.findAll(); + assertThat(customerContactList).hasSize(databaseSizeBeforeCreate + 1); + CustomerContact testCustomerContact = customerContactList.get(customerContactList.size() - 1); + assertThat(testCustomerContact.getRole()).isEqualTo(DEFAULT_ROLE); + } + + @Test + @Transactional + public void createCustomerContactWithExistingId() throws Exception { + int databaseSizeBeforeCreate = customerContactRepository.findAll().size(); + + // Create the CustomerContact with an existing ID + customerContact.setId(1L); + CustomerContactDTO customerContactDTO = customerContactMapper.toDto(customerContact); + + // An entity with an existing ID cannot be created, so this API call must fail + restCustomerContactMockMvc.perform(post("/api/customer-contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerContactDTO))) + .andExpect(status().isBadRequest()); + + // Validate the CustomerContact in the database + List customerContactList = customerContactRepository.findAll(); + assertThat(customerContactList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void checkRoleIsRequired() throws Exception { + int databaseSizeBeforeTest = customerContactRepository.findAll().size(); + // set the field null + customerContact.setRole(null); + + // Create the CustomerContact, which fails. + CustomerContactDTO customerContactDTO = customerContactMapper.toDto(customerContact); + + restCustomerContactMockMvc.perform(post("/api/customer-contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerContactDTO))) + .andExpect(status().isBadRequest()); + + List customerContactList = customerContactRepository.findAll(); + assertThat(customerContactList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void getAllCustomerContacts() throws Exception { + // Initialize the database + customerContactRepository.saveAndFlush(customerContact); + + // Get all the customerContactList + restCustomerContactMockMvc.perform(get("/api/customer-contacts?sort=id,desc")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(customerContact.getId().intValue()))) + .andExpect(jsonPath("$.[*].role").value(hasItem(DEFAULT_ROLE.toString()))); + } + + @Test + @Transactional + public void getCustomerContact() throws Exception { + // Initialize the database + customerContactRepository.saveAndFlush(customerContact); + + // Get the customerContact + restCustomerContactMockMvc.perform(get("/api/customer-contacts/{id}", customerContact.getId())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.id").value(customerContact.getId().intValue())) + .andExpect(jsonPath("$.role").value(DEFAULT_ROLE.toString())); + } + + @Test + @Transactional + public void getAllCustomerContactsByRoleIsEqualToSomething() throws Exception { + // Initialize the database + customerContactRepository.saveAndFlush(customerContact); + + // Get all the customerContactList where role equals to DEFAULT_ROLE + defaultCustomerContactShouldBeFound("role.equals=" + DEFAULT_ROLE); + + // Get all the customerContactList where role equals to UPDATED_ROLE + defaultCustomerContactShouldNotBeFound("role.equals=" + UPDATED_ROLE); + } + + @Test + @Transactional + public void getAllCustomerContactsByRoleIsInShouldWork() throws Exception { + // Initialize the database + customerContactRepository.saveAndFlush(customerContact); + + // Get all the customerContactList where role in DEFAULT_ROLE or UPDATED_ROLE + defaultCustomerContactShouldBeFound("role.in=" + DEFAULT_ROLE + "," + UPDATED_ROLE); + + // Get all the customerContactList where role equals to UPDATED_ROLE + defaultCustomerContactShouldNotBeFound("role.in=" + UPDATED_ROLE); + } + + @Test + @Transactional + public void getAllCustomerContactsByRoleIsNullOrNotNull() throws Exception { + // Initialize the database + customerContactRepository.saveAndFlush(customerContact); + + // Get all the customerContactList where role is not null + defaultCustomerContactShouldBeFound("role.specified=true"); + + // Get all the customerContactList where role is null + defaultCustomerContactShouldNotBeFound("role.specified=false"); + } + + @Test + @Transactional + public void getAllCustomerContactsByContactIsEqualToSomething() throws Exception { + // Initialize the database + Contact contact = ContactResourceIntTest.createEntity(em); + em.persist(contact); + em.flush(); + customerContact.setContact(contact); + customerContactRepository.saveAndFlush(customerContact); + Long contactId = contact.getId(); + + // Get all the customerContactList where contact equals to contactId + defaultCustomerContactShouldBeFound("contactId.equals=" + contactId); + + // Get all the customerContactList where contact equals to contactId + 1 + defaultCustomerContactShouldNotBeFound("contactId.equals=" + (contactId + 1)); + } + + + @Test + @Transactional + public void getAllCustomerContactsByCustomerIsEqualToSomething() throws Exception { + // Initialize the database + Customer customer = CustomerResourceIntTest.createEntity(em); + em.persist(customer); + em.flush(); + customerContact.setCustomer(customer); + customerContactRepository.saveAndFlush(customerContact); + Long customerId = customer.getId(); + + // Get all the customerContactList where customer equals to customerId + defaultCustomerContactShouldBeFound("customerId.equals=" + customerId); + + // Get all the customerContactList where customer equals to customerId + 1 + defaultCustomerContactShouldNotBeFound("customerId.equals=" + (customerId + 1)); + } + + /** + * Executes the search, and checks that the default entity is returned + */ + private void defaultCustomerContactShouldBeFound(String filter) throws Exception { + restCustomerContactMockMvc.perform(get("/api/customer-contacts?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(customerContact.getId().intValue()))) + .andExpect(jsonPath("$.[*].role").value(hasItem(DEFAULT_ROLE.toString()))); + + // Check, that the count call also returns 1 + restCustomerContactMockMvc.perform(get("/api/customer-contacts/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("1")); + } + + /** + * Executes the search, and checks that the default entity is not returned + */ + private void defaultCustomerContactShouldNotBeFound(String filter) throws Exception { + restCustomerContactMockMvc.perform(get("/api/customer-contacts?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$").isEmpty()); + + // Check, that the count call also returns 0 + restCustomerContactMockMvc.perform(get("/api/customer-contacts/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("0")); + } + + + @Test + @Transactional + public void getNonExistingCustomerContact() throws Exception { + // Get the customerContact + restCustomerContactMockMvc.perform(get("/api/customer-contacts/{id}", Long.MAX_VALUE)) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void updateCustomerContact() throws Exception { + // Initialize the database + customerContactRepository.saveAndFlush(customerContact); + + int databaseSizeBeforeUpdate = customerContactRepository.findAll().size(); + + // Update the customerContact + CustomerContact updatedCustomerContact = customerContactRepository.findById(customerContact.getId()).get(); + // Disconnect from session so that the updates on updatedCustomerContact are not directly saved in db + em.detach(updatedCustomerContact); + updatedCustomerContact + .role(UPDATED_ROLE); + CustomerContactDTO customerContactDTO = customerContactMapper.toDto(updatedCustomerContact); + + restCustomerContactMockMvc.perform(put("/api/customer-contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerContactDTO))) + .andExpect(status().isOk()); + + // Validate the CustomerContact in the database + List customerContactList = customerContactRepository.findAll(); + assertThat(customerContactList).hasSize(databaseSizeBeforeUpdate); + CustomerContact testCustomerContact = customerContactList.get(customerContactList.size() - 1); + assertThat(testCustomerContact.getRole()).isEqualTo(UPDATED_ROLE); + } + + @Test + @Transactional + public void updateNonExistingCustomerContact() throws Exception { + int databaseSizeBeforeUpdate = customerContactRepository.findAll().size(); + + // Create the CustomerContact + CustomerContactDTO customerContactDTO = customerContactMapper.toDto(customerContact); + + // If the entity doesn't have an ID, it will throw BadRequestAlertException + restCustomerContactMockMvc.perform(put("/api/customer-contacts") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerContactDTO))) + .andExpect(status().isBadRequest()); + + // Validate the CustomerContact in the database + List customerContactList = customerContactRepository.findAll(); + assertThat(customerContactList).hasSize(databaseSizeBeforeUpdate); + } + + @Test + @Transactional + public void deleteCustomerContact() throws Exception { + // Initialize the database + customerContactRepository.saveAndFlush(customerContact); + + int databaseSizeBeforeDelete = customerContactRepository.findAll().size(); + + // Delete the customerContact + restCustomerContactMockMvc.perform(delete("/api/customer-contacts/{id}", customerContact.getId()) + .accept(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()); + + // Validate the database is empty + List customerContactList = customerContactRepository.findAll(); + assertThat(customerContactList).hasSize(databaseSizeBeforeDelete - 1); + } + + @Test + @Transactional + public void equalsVerifier() throws Exception { + TestUtil.equalsVerifier(CustomerContact.class); + CustomerContact customerContact1 = new CustomerContact(); + customerContact1.setId(1L); + CustomerContact customerContact2 = new CustomerContact(); + customerContact2.setId(customerContact1.getId()); + assertThat(customerContact1).isEqualTo(customerContact2); + customerContact2.setId(2L); + assertThat(customerContact1).isNotEqualTo(customerContact2); + customerContact1.setId(null); + assertThat(customerContact1).isNotEqualTo(customerContact2); + } + + @Test + @Transactional + public void dtoEqualsVerifier() throws Exception { + TestUtil.equalsVerifier(CustomerContactDTO.class); + CustomerContactDTO customerContactDTO1 = new CustomerContactDTO(); + customerContactDTO1.setId(1L); + CustomerContactDTO customerContactDTO2 = new CustomerContactDTO(); + assertThat(customerContactDTO1).isNotEqualTo(customerContactDTO2); + customerContactDTO2.setId(customerContactDTO1.getId()); + assertThat(customerContactDTO1).isEqualTo(customerContactDTO2); + customerContactDTO2.setId(2L); + assertThat(customerContactDTO1).isNotEqualTo(customerContactDTO2); + customerContactDTO1.setId(null); + assertThat(customerContactDTO1).isNotEqualTo(customerContactDTO2); + } + + @Test + @Transactional + public void testEntityFromId() { + assertThat(customerContactMapper.fromId(42L).getId()).isEqualTo(42); + assertThat(customerContactMapper.fromId(null)).isNull(); + } +} diff --git a/src/test/java/org/hostsharing/hsadminng/web/rest/CustomerResourceIntTest.java b/src/test/java/org/hostsharing/hsadminng/web/rest/CustomerResourceIntTest.java new file mode 100644 index 00000000..6aa493eb --- /dev/null +++ b/src/test/java/org/hostsharing/hsadminng/web/rest/CustomerResourceIntTest.java @@ -0,0 +1,515 @@ +package org.hostsharing.hsadminng.web.rest; + +import org.hostsharing.hsadminng.HsadminNgApp; + +import org.hostsharing.hsadminng.domain.Customer; +import org.hostsharing.hsadminng.domain.Membership; +import org.hostsharing.hsadminng.domain.CustomerContact; +import org.hostsharing.hsadminng.repository.CustomerRepository; +import org.hostsharing.hsadminng.service.CustomerService; +import org.hostsharing.hsadminng.service.dto.CustomerDTO; +import org.hostsharing.hsadminng.service.mapper.CustomerMapper; +import org.hostsharing.hsadminng.web.rest.errors.ExceptionTranslator; +import org.hostsharing.hsadminng.service.dto.CustomerCriteria; +import org.hostsharing.hsadminng.service.CustomerQueryService; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.Validator; + +import javax.persistence.EntityManager; +import java.util.List; + + +import static org.hostsharing.hsadminng.web.rest.TestUtil.createFormattingConversionService; +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Test class for the CustomerResource REST controller. + * + * @see CustomerResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = HsadminNgApp.class) +public class CustomerResourceIntTest { + + private static final Integer DEFAULT_NUMBER = 10000; + private static final Integer UPDATED_NUMBER = 10001; + + private static final String DEFAULT_PREFIX = "lzv"; + private static final String UPDATED_PREFIX = "zf"; + + @Autowired + private CustomerRepository customerRepository; + + @Autowired + private CustomerMapper customerMapper; + + @Autowired + private CustomerService customerService; + + @Autowired + private CustomerQueryService customerQueryService; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private EntityManager em; + + @Autowired + private Validator validator; + + private MockMvc restCustomerMockMvc; + + private Customer customer; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + final CustomerResource customerResource = new CustomerResource(customerService, customerQueryService); + this.restCustomerMockMvc = MockMvcBuilders.standaloneSetup(customerResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setControllerAdvice(exceptionTranslator) + .setConversionService(createFormattingConversionService()) + .setMessageConverters(jacksonMessageConverter) + .setValidator(validator).build(); + } + + /** + * Create an entity for this test. + * + * This is a static method, as tests for other entities might also need it, + * if they test an entity which requires the current entity. + */ + public static Customer createEntity(EntityManager em) { + Customer customer = new Customer() + .number(DEFAULT_NUMBER) + .prefix(DEFAULT_PREFIX); + return customer; + } + + @Before + public void initTest() { + customer = createEntity(em); + } + + @Test + @Transactional + public void createCustomer() throws Exception { + int databaseSizeBeforeCreate = customerRepository.findAll().size(); + + // Create the Customer + CustomerDTO customerDTO = customerMapper.toDto(customer); + restCustomerMockMvc.perform(post("/api/customers") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerDTO))) + .andExpect(status().isCreated()); + + // Validate the Customer in the database + List customerList = customerRepository.findAll(); + assertThat(customerList).hasSize(databaseSizeBeforeCreate + 1); + Customer testCustomer = customerList.get(customerList.size() - 1); + assertThat(testCustomer.getNumber()).isEqualTo(DEFAULT_NUMBER); + assertThat(testCustomer.getPrefix()).isEqualTo(DEFAULT_PREFIX); + } + + @Test + @Transactional + public void createCustomerWithExistingId() throws Exception { + int databaseSizeBeforeCreate = customerRepository.findAll().size(); + + // Create the Customer with an existing ID + customer.setId(1L); + CustomerDTO customerDTO = customerMapper.toDto(customer); + + // An entity with an existing ID cannot be created, so this API call must fail + restCustomerMockMvc.perform(post("/api/customers") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Customer in the database + List customerList = customerRepository.findAll(); + assertThat(customerList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void checkNumberIsRequired() throws Exception { + int databaseSizeBeforeTest = customerRepository.findAll().size(); + // set the field null + customer.setNumber(null); + + // Create the Customer, which fails. + CustomerDTO customerDTO = customerMapper.toDto(customer); + + restCustomerMockMvc.perform(post("/api/customers") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerDTO))) + .andExpect(status().isBadRequest()); + + List customerList = customerRepository.findAll(); + assertThat(customerList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkPrefixIsRequired() throws Exception { + int databaseSizeBeforeTest = customerRepository.findAll().size(); + // set the field null + customer.setPrefix(null); + + // Create the Customer, which fails. + CustomerDTO customerDTO = customerMapper.toDto(customer); + + restCustomerMockMvc.perform(post("/api/customers") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerDTO))) + .andExpect(status().isBadRequest()); + + List customerList = customerRepository.findAll(); + assertThat(customerList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void getAllCustomers() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + // Get all the customerList + restCustomerMockMvc.perform(get("/api/customers?sort=id,desc")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(customer.getId().intValue()))) + .andExpect(jsonPath("$.[*].number").value(hasItem(DEFAULT_NUMBER))) + .andExpect(jsonPath("$.[*].prefix").value(hasItem(DEFAULT_PREFIX.toString()))); + } + + @Test + @Transactional + public void getCustomer() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + // Get the customer + restCustomerMockMvc.perform(get("/api/customers/{id}", customer.getId())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.id").value(customer.getId().intValue())) + .andExpect(jsonPath("$.number").value(DEFAULT_NUMBER)) + .andExpect(jsonPath("$.prefix").value(DEFAULT_PREFIX.toString())); + } + + @Test + @Transactional + public void getAllCustomersByNumberIsEqualToSomething() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + // Get all the customerList where number equals to DEFAULT_NUMBER + defaultCustomerShouldBeFound("number.equals=" + DEFAULT_NUMBER); + + // Get all the customerList where number equals to UPDATED_NUMBER + defaultCustomerShouldNotBeFound("number.equals=" + UPDATED_NUMBER); + } + + @Test + @Transactional + public void getAllCustomersByNumberIsInShouldWork() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + // Get all the customerList where number in DEFAULT_NUMBER or UPDATED_NUMBER + defaultCustomerShouldBeFound("number.in=" + DEFAULT_NUMBER + "," + UPDATED_NUMBER); + + // Get all the customerList where number equals to UPDATED_NUMBER + defaultCustomerShouldNotBeFound("number.in=" + UPDATED_NUMBER); + } + + @Test + @Transactional + public void getAllCustomersByNumberIsNullOrNotNull() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + // Get all the customerList where number is not null + defaultCustomerShouldBeFound("number.specified=true"); + + // Get all the customerList where number is null + defaultCustomerShouldNotBeFound("number.specified=false"); + } + + @Test + @Transactional + public void getAllCustomersByNumberIsGreaterThanOrEqualToSomething() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + // Get all the customerList where number greater than or equals to DEFAULT_NUMBER + defaultCustomerShouldBeFound("number.greaterOrEqualThan=" + DEFAULT_NUMBER); + + // Get all the customerList where number greater than or equals to (DEFAULT_NUMBER + 1) + defaultCustomerShouldNotBeFound("number.greaterOrEqualThan=" + (DEFAULT_NUMBER + 1)); + } + + @Test + @Transactional + public void getAllCustomersByNumberIsLessThanSomething() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + // Get all the customerList where number less than or equals to DEFAULT_NUMBER + defaultCustomerShouldNotBeFound("number.lessThan=" + DEFAULT_NUMBER); + + // Get all the customerList where number less than or equals to (DEFAULT_NUMBER + 1) + defaultCustomerShouldBeFound("number.lessThan=" + (DEFAULT_NUMBER + 1)); + } + + + @Test + @Transactional + public void getAllCustomersByPrefixIsEqualToSomething() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + // Get all the customerList where prefix equals to DEFAULT_PREFIX + defaultCustomerShouldBeFound("prefix.equals=" + DEFAULT_PREFIX); + + // Get all the customerList where prefix equals to UPDATED_PREFIX + defaultCustomerShouldNotBeFound("prefix.equals=" + UPDATED_PREFIX); + } + + @Test + @Transactional + public void getAllCustomersByPrefixIsInShouldWork() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + // Get all the customerList where prefix in DEFAULT_PREFIX or UPDATED_PREFIX + defaultCustomerShouldBeFound("prefix.in=" + DEFAULT_PREFIX + "," + UPDATED_PREFIX); + + // Get all the customerList where prefix equals to UPDATED_PREFIX + defaultCustomerShouldNotBeFound("prefix.in=" + UPDATED_PREFIX); + } + + @Test + @Transactional + public void getAllCustomersByPrefixIsNullOrNotNull() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + // Get all the customerList where prefix is not null + defaultCustomerShouldBeFound("prefix.specified=true"); + + // Get all the customerList where prefix is null + defaultCustomerShouldNotBeFound("prefix.specified=false"); + } + + @Test + @Transactional + public void getAllCustomersByMembershipIsEqualToSomething() throws Exception { + // Initialize the database + Membership membership = MembershipResourceIntTest.createEntity(em); + em.persist(membership); + em.flush(); + customer.addMembership(membership); + customerRepository.saveAndFlush(customer); + Long membershipId = membership.getId(); + + // Get all the customerList where membership equals to membershipId + defaultCustomerShouldBeFound("membershipId.equals=" + membershipId); + + // Get all the customerList where membership equals to membershipId + 1 + defaultCustomerShouldNotBeFound("membershipId.equals=" + (membershipId + 1)); + } + + + @Test + @Transactional + public void getAllCustomersByRoleIsEqualToSomething() throws Exception { + // Initialize the database + CustomerContact role = CustomerContactResourceIntTest.createEntity(em); + em.persist(role); + em.flush(); + customer.addRole(role); + customerRepository.saveAndFlush(customer); + Long roleId = role.getId(); + + // Get all the customerList where role equals to roleId + defaultCustomerShouldBeFound("roleId.equals=" + roleId); + + // Get all the customerList where role equals to roleId + 1 + defaultCustomerShouldNotBeFound("roleId.equals=" + (roleId + 1)); + } + + /** + * Executes the search, and checks that the default entity is returned + */ + private void defaultCustomerShouldBeFound(String filter) throws Exception { + restCustomerMockMvc.perform(get("/api/customers?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(customer.getId().intValue()))) + .andExpect(jsonPath("$.[*].number").value(hasItem(DEFAULT_NUMBER))) + .andExpect(jsonPath("$.[*].prefix").value(hasItem(DEFAULT_PREFIX))); + + // Check, that the count call also returns 1 + restCustomerMockMvc.perform(get("/api/customers/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("1")); + } + + /** + * Executes the search, and checks that the default entity is not returned + */ + private void defaultCustomerShouldNotBeFound(String filter) throws Exception { + restCustomerMockMvc.perform(get("/api/customers?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$").isEmpty()); + + // Check, that the count call also returns 0 + restCustomerMockMvc.perform(get("/api/customers/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("0")); + } + + + @Test + @Transactional + public void getNonExistingCustomer() throws Exception { + // Get the customer + restCustomerMockMvc.perform(get("/api/customers/{id}", Long.MAX_VALUE)) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void updateCustomer() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + int databaseSizeBeforeUpdate = customerRepository.findAll().size(); + + // Update the customer + Customer updatedCustomer = customerRepository.findById(customer.getId()).get(); + // Disconnect from session so that the updates on updatedCustomer are not directly saved in db + em.detach(updatedCustomer); + updatedCustomer + .number(UPDATED_NUMBER) + .prefix(UPDATED_PREFIX); + CustomerDTO customerDTO = customerMapper.toDto(updatedCustomer); + + restCustomerMockMvc.perform(put("/api/customers") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerDTO))) + .andExpect(status().isOk()); + + // Validate the Customer in the database + List customerList = customerRepository.findAll(); + assertThat(customerList).hasSize(databaseSizeBeforeUpdate); + Customer testCustomer = customerList.get(customerList.size() - 1); + assertThat(testCustomer.getNumber()).isEqualTo(UPDATED_NUMBER); + assertThat(testCustomer.getPrefix()).isEqualTo(UPDATED_PREFIX); + } + + @Test + @Transactional + public void updateNonExistingCustomer() throws Exception { + int databaseSizeBeforeUpdate = customerRepository.findAll().size(); + + // Create the Customer + CustomerDTO customerDTO = customerMapper.toDto(customer); + + // If the entity doesn't have an ID, it will throw BadRequestAlertException + restCustomerMockMvc.perform(put("/api/customers") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(customerDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Customer in the database + List customerList = customerRepository.findAll(); + assertThat(customerList).hasSize(databaseSizeBeforeUpdate); + } + + @Test + @Transactional + public void deleteCustomer() throws Exception { + // Initialize the database + customerRepository.saveAndFlush(customer); + + int databaseSizeBeforeDelete = customerRepository.findAll().size(); + + // Delete the customer + restCustomerMockMvc.perform(delete("/api/customers/{id}", customer.getId()) + .accept(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()); + + // Validate the database is empty + List customerList = customerRepository.findAll(); + assertThat(customerList).hasSize(databaseSizeBeforeDelete - 1); + } + + @Test + @Transactional + public void equalsVerifier() throws Exception { + TestUtil.equalsVerifier(Customer.class); + Customer customer1 = new Customer(); + customer1.setId(1L); + Customer customer2 = new Customer(); + customer2.setId(customer1.getId()); + assertThat(customer1).isEqualTo(customer2); + customer2.setId(2L); + assertThat(customer1).isNotEqualTo(customer2); + customer1.setId(null); + assertThat(customer1).isNotEqualTo(customer2); + } + + @Test + @Transactional + public void dtoEqualsVerifier() throws Exception { + TestUtil.equalsVerifier(CustomerDTO.class); + CustomerDTO customerDTO1 = new CustomerDTO(); + customerDTO1.setId(1L); + CustomerDTO customerDTO2 = new CustomerDTO(); + assertThat(customerDTO1).isNotEqualTo(customerDTO2); + customerDTO2.setId(customerDTO1.getId()); + assertThat(customerDTO1).isEqualTo(customerDTO2); + customerDTO2.setId(2L); + assertThat(customerDTO1).isNotEqualTo(customerDTO2); + customerDTO1.setId(null); + assertThat(customerDTO1).isNotEqualTo(customerDTO2); + } + + @Test + @Transactional + public void testEntityFromId() { + assertThat(customerMapper.fromId(42L).getId()).isEqualTo(42); + assertThat(customerMapper.fromId(null)).isNull(); + } +} diff --git a/src/test/java/org/hostsharing/hsadminng/web/rest/MembershipResourceIntTest.java b/src/test/java/org/hostsharing/hsadminng/web/rest/MembershipResourceIntTest.java new file mode 100644 index 00000000..4a50162c --- /dev/null +++ b/src/test/java/org/hostsharing/hsadminng/web/rest/MembershipResourceIntTest.java @@ -0,0 +1,545 @@ +package org.hostsharing.hsadminng.web.rest; + +import org.hostsharing.hsadminng.HsadminNgApp; + +import org.hostsharing.hsadminng.domain.Membership; +import org.hostsharing.hsadminng.domain.Share; +import org.hostsharing.hsadminng.domain.Asset; +import org.hostsharing.hsadminng.domain.Customer; +import org.hostsharing.hsadminng.repository.MembershipRepository; +import org.hostsharing.hsadminng.service.MembershipService; +import org.hostsharing.hsadminng.service.dto.MembershipDTO; +import org.hostsharing.hsadminng.service.mapper.MembershipMapper; +import org.hostsharing.hsadminng.web.rest.errors.ExceptionTranslator; +import org.hostsharing.hsadminng.service.dto.MembershipCriteria; +import org.hostsharing.hsadminng.service.MembershipQueryService; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.Validator; + +import javax.persistence.EntityManager; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.List; + + +import static org.hostsharing.hsadminng.web.rest.TestUtil.createFormattingConversionService; +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Test class for the MembershipResource REST controller. + * + * @see MembershipResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = HsadminNgApp.class) +public class MembershipResourceIntTest { + + private static final LocalDate DEFAULT_SINCE_DATE = LocalDate.ofEpochDay(0L); + private static final LocalDate UPDATED_SINCE_DATE = LocalDate.now(ZoneId.systemDefault()); + + private static final LocalDate DEFAULT_UNTIL_DATE = LocalDate.ofEpochDay(0L); + private static final LocalDate UPDATED_UNTIL_DATE = LocalDate.now(ZoneId.systemDefault()); + + @Autowired + private MembershipRepository membershipRepository; + + @Autowired + private MembershipMapper membershipMapper; + + @Autowired + private MembershipService membershipService; + + @Autowired + private MembershipQueryService membershipQueryService; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private EntityManager em; + + @Autowired + private Validator validator; + + private MockMvc restMembershipMockMvc; + + private Membership membership; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + final MembershipResource membershipResource = new MembershipResource(membershipService, membershipQueryService); + this.restMembershipMockMvc = MockMvcBuilders.standaloneSetup(membershipResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setControllerAdvice(exceptionTranslator) + .setConversionService(createFormattingConversionService()) + .setMessageConverters(jacksonMessageConverter) + .setValidator(validator).build(); + } + + /** + * Create an entity for this test. + * + * This is a static method, as tests for other entities might also need it, + * if they test an entity which requires the current entity. + */ + public static Membership createEntity(EntityManager em) { + Membership membership = new Membership() + .sinceDate(DEFAULT_SINCE_DATE) + .untilDate(DEFAULT_UNTIL_DATE); + return membership; + } + + @Before + public void initTest() { + membership = createEntity(em); + } + + @Test + @Transactional + public void createMembership() throws Exception { + int databaseSizeBeforeCreate = membershipRepository.findAll().size(); + + // Create the Membership + MembershipDTO membershipDTO = membershipMapper.toDto(membership); + restMembershipMockMvc.perform(post("/api/memberships") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(membershipDTO))) + .andExpect(status().isCreated()); + + // Validate the Membership in the database + List membershipList = membershipRepository.findAll(); + assertThat(membershipList).hasSize(databaseSizeBeforeCreate + 1); + Membership testMembership = membershipList.get(membershipList.size() - 1); + assertThat(testMembership.getSinceDate()).isEqualTo(DEFAULT_SINCE_DATE); + assertThat(testMembership.getUntilDate()).isEqualTo(DEFAULT_UNTIL_DATE); + } + + @Test + @Transactional + public void createMembershipWithExistingId() throws Exception { + int databaseSizeBeforeCreate = membershipRepository.findAll().size(); + + // Create the Membership with an existing ID + membership.setId(1L); + MembershipDTO membershipDTO = membershipMapper.toDto(membership); + + // An entity with an existing ID cannot be created, so this API call must fail + restMembershipMockMvc.perform(post("/api/memberships") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(membershipDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Membership in the database + List membershipList = membershipRepository.findAll(); + assertThat(membershipList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void checkSinceDateIsRequired() throws Exception { + int databaseSizeBeforeTest = membershipRepository.findAll().size(); + // set the field null + membership.setSinceDate(null); + + // Create the Membership, which fails. + MembershipDTO membershipDTO = membershipMapper.toDto(membership); + + restMembershipMockMvc.perform(post("/api/memberships") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(membershipDTO))) + .andExpect(status().isBadRequest()); + + List membershipList = membershipRepository.findAll(); + assertThat(membershipList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void getAllMemberships() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList + restMembershipMockMvc.perform(get("/api/memberships?sort=id,desc")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(membership.getId().intValue()))) + .andExpect(jsonPath("$.[*].sinceDate").value(hasItem(DEFAULT_SINCE_DATE.toString()))) + .andExpect(jsonPath("$.[*].untilDate").value(hasItem(DEFAULT_UNTIL_DATE.toString()))); + } + + @Test + @Transactional + public void getMembership() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get the membership + restMembershipMockMvc.perform(get("/api/memberships/{id}", membership.getId())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.id").value(membership.getId().intValue())) + .andExpect(jsonPath("$.sinceDate").value(DEFAULT_SINCE_DATE.toString())) + .andExpect(jsonPath("$.untilDate").value(DEFAULT_UNTIL_DATE.toString())); + } + + @Test + @Transactional + public void getAllMembershipsBySinceDateIsEqualToSomething() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList where sinceDate equals to DEFAULT_SINCE_DATE + defaultMembershipShouldBeFound("sinceDate.equals=" + DEFAULT_SINCE_DATE); + + // Get all the membershipList where sinceDate equals to UPDATED_SINCE_DATE + defaultMembershipShouldNotBeFound("sinceDate.equals=" + UPDATED_SINCE_DATE); + } + + @Test + @Transactional + public void getAllMembershipsBySinceDateIsInShouldWork() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList where sinceDate in DEFAULT_SINCE_DATE or UPDATED_SINCE_DATE + defaultMembershipShouldBeFound("sinceDate.in=" + DEFAULT_SINCE_DATE + "," + UPDATED_SINCE_DATE); + + // Get all the membershipList where sinceDate equals to UPDATED_SINCE_DATE + defaultMembershipShouldNotBeFound("sinceDate.in=" + UPDATED_SINCE_DATE); + } + + @Test + @Transactional + public void getAllMembershipsBySinceDateIsNullOrNotNull() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList where sinceDate is not null + defaultMembershipShouldBeFound("sinceDate.specified=true"); + + // Get all the membershipList where sinceDate is null + defaultMembershipShouldNotBeFound("sinceDate.specified=false"); + } + + @Test + @Transactional + public void getAllMembershipsBySinceDateIsGreaterThanOrEqualToSomething() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList where sinceDate greater than or equals to DEFAULT_SINCE_DATE + defaultMembershipShouldBeFound("sinceDate.greaterOrEqualThan=" + DEFAULT_SINCE_DATE); + + // Get all the membershipList where sinceDate greater than or equals to UPDATED_SINCE_DATE + defaultMembershipShouldNotBeFound("sinceDate.greaterOrEqualThan=" + UPDATED_SINCE_DATE); + } + + @Test + @Transactional + public void getAllMembershipsBySinceDateIsLessThanSomething() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList where sinceDate less than or equals to DEFAULT_SINCE_DATE + defaultMembershipShouldNotBeFound("sinceDate.lessThan=" + DEFAULT_SINCE_DATE); + + // Get all the membershipList where sinceDate less than or equals to UPDATED_SINCE_DATE + defaultMembershipShouldBeFound("sinceDate.lessThan=" + UPDATED_SINCE_DATE); + } + + + @Test + @Transactional + public void getAllMembershipsByUntilDateIsEqualToSomething() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList where untilDate equals to DEFAULT_UNTIL_DATE + defaultMembershipShouldBeFound("untilDate.equals=" + DEFAULT_UNTIL_DATE); + + // Get all the membershipList where untilDate equals to UPDATED_UNTIL_DATE + defaultMembershipShouldNotBeFound("untilDate.equals=" + UPDATED_UNTIL_DATE); + } + + @Test + @Transactional + public void getAllMembershipsByUntilDateIsInShouldWork() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList where untilDate in DEFAULT_UNTIL_DATE or UPDATED_UNTIL_DATE + defaultMembershipShouldBeFound("untilDate.in=" + DEFAULT_UNTIL_DATE + "," + UPDATED_UNTIL_DATE); + + // Get all the membershipList where untilDate equals to UPDATED_UNTIL_DATE + defaultMembershipShouldNotBeFound("untilDate.in=" + UPDATED_UNTIL_DATE); + } + + @Test + @Transactional + public void getAllMembershipsByUntilDateIsNullOrNotNull() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList where untilDate is not null + defaultMembershipShouldBeFound("untilDate.specified=true"); + + // Get all the membershipList where untilDate is null + defaultMembershipShouldNotBeFound("untilDate.specified=false"); + } + + @Test + @Transactional + public void getAllMembershipsByUntilDateIsGreaterThanOrEqualToSomething() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList where untilDate greater than or equals to DEFAULT_UNTIL_DATE + defaultMembershipShouldBeFound("untilDate.greaterOrEqualThan=" + DEFAULT_UNTIL_DATE); + + // Get all the membershipList where untilDate greater than or equals to UPDATED_UNTIL_DATE + defaultMembershipShouldNotBeFound("untilDate.greaterOrEqualThan=" + UPDATED_UNTIL_DATE); + } + + @Test + @Transactional + public void getAllMembershipsByUntilDateIsLessThanSomething() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + // Get all the membershipList where untilDate less than or equals to DEFAULT_UNTIL_DATE + defaultMembershipShouldNotBeFound("untilDate.lessThan=" + DEFAULT_UNTIL_DATE); + + // Get all the membershipList where untilDate less than or equals to UPDATED_UNTIL_DATE + defaultMembershipShouldBeFound("untilDate.lessThan=" + UPDATED_UNTIL_DATE); + } + + + @Test + @Transactional + public void getAllMembershipsByShareIsEqualToSomething() throws Exception { + // Initialize the database + Share share = ShareResourceIntTest.createEntity(em); + em.persist(share); + em.flush(); + membership.addShare(share); + membershipRepository.saveAndFlush(membership); + Long shareId = share.getId(); + + // Get all the membershipList where share equals to shareId + defaultMembershipShouldBeFound("shareId.equals=" + shareId); + + // Get all the membershipList where share equals to shareId + 1 + defaultMembershipShouldNotBeFound("shareId.equals=" + (shareId + 1)); + } + + + @Test + @Transactional + public void getAllMembershipsByAssetIsEqualToSomething() throws Exception { + // Initialize the database + Asset asset = AssetResourceIntTest.createEntity(em); + em.persist(asset); + em.flush(); + membership.addAsset(asset); + membershipRepository.saveAndFlush(membership); + Long assetId = asset.getId(); + + // Get all the membershipList where asset equals to assetId + defaultMembershipShouldBeFound("assetId.equals=" + assetId); + + // Get all the membershipList where asset equals to assetId + 1 + defaultMembershipShouldNotBeFound("assetId.equals=" + (assetId + 1)); + } + + + @Test + @Transactional + public void getAllMembershipsByCustomerIsEqualToSomething() throws Exception { + // Initialize the database + Customer customer = CustomerResourceIntTest.createEntity(em); + em.persist(customer); + em.flush(); + membership.setCustomer(customer); + membershipRepository.saveAndFlush(membership); + Long customerId = customer.getId(); + + // Get all the membershipList where customer equals to customerId + defaultMembershipShouldBeFound("customerId.equals=" + customerId); + + // Get all the membershipList where customer equals to customerId + 1 + defaultMembershipShouldNotBeFound("customerId.equals=" + (customerId + 1)); + } + + /** + * Executes the search, and checks that the default entity is returned + */ + private void defaultMembershipShouldBeFound(String filter) throws Exception { + restMembershipMockMvc.perform(get("/api/memberships?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(membership.getId().intValue()))) + .andExpect(jsonPath("$.[*].sinceDate").value(hasItem(DEFAULT_SINCE_DATE.toString()))) + .andExpect(jsonPath("$.[*].untilDate").value(hasItem(DEFAULT_UNTIL_DATE.toString()))); + + // Check, that the count call also returns 1 + restMembershipMockMvc.perform(get("/api/memberships/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("1")); + } + + /** + * Executes the search, and checks that the default entity is not returned + */ + private void defaultMembershipShouldNotBeFound(String filter) throws Exception { + restMembershipMockMvc.perform(get("/api/memberships?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$").isEmpty()); + + // Check, that the count call also returns 0 + restMembershipMockMvc.perform(get("/api/memberships/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("0")); + } + + + @Test + @Transactional + public void getNonExistingMembership() throws Exception { + // Get the membership + restMembershipMockMvc.perform(get("/api/memberships/{id}", Long.MAX_VALUE)) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void updateMembership() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + int databaseSizeBeforeUpdate = membershipRepository.findAll().size(); + + // Update the membership + Membership updatedMembership = membershipRepository.findById(membership.getId()).get(); + // Disconnect from session so that the updates on updatedMembership are not directly saved in db + em.detach(updatedMembership); + updatedMembership + .sinceDate(UPDATED_SINCE_DATE) + .untilDate(UPDATED_UNTIL_DATE); + MembershipDTO membershipDTO = membershipMapper.toDto(updatedMembership); + + restMembershipMockMvc.perform(put("/api/memberships") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(membershipDTO))) + .andExpect(status().isOk()); + + // Validate the Membership in the database + List membershipList = membershipRepository.findAll(); + assertThat(membershipList).hasSize(databaseSizeBeforeUpdate); + Membership testMembership = membershipList.get(membershipList.size() - 1); + assertThat(testMembership.getSinceDate()).isEqualTo(UPDATED_SINCE_DATE); + assertThat(testMembership.getUntilDate()).isEqualTo(UPDATED_UNTIL_DATE); + } + + @Test + @Transactional + public void updateNonExistingMembership() throws Exception { + int databaseSizeBeforeUpdate = membershipRepository.findAll().size(); + + // Create the Membership + MembershipDTO membershipDTO = membershipMapper.toDto(membership); + + // If the entity doesn't have an ID, it will throw BadRequestAlertException + restMembershipMockMvc.perform(put("/api/memberships") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(membershipDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Membership in the database + List membershipList = membershipRepository.findAll(); + assertThat(membershipList).hasSize(databaseSizeBeforeUpdate); + } + + @Test + @Transactional + public void deleteMembership() throws Exception { + // Initialize the database + membershipRepository.saveAndFlush(membership); + + int databaseSizeBeforeDelete = membershipRepository.findAll().size(); + + // Delete the membership + restMembershipMockMvc.perform(delete("/api/memberships/{id}", membership.getId()) + .accept(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()); + + // Validate the database is empty + List membershipList = membershipRepository.findAll(); + assertThat(membershipList).hasSize(databaseSizeBeforeDelete - 1); + } + + @Test + @Transactional + public void equalsVerifier() throws Exception { + TestUtil.equalsVerifier(Membership.class); + Membership membership1 = new Membership(); + membership1.setId(1L); + Membership membership2 = new Membership(); + membership2.setId(membership1.getId()); + assertThat(membership1).isEqualTo(membership2); + membership2.setId(2L); + assertThat(membership1).isNotEqualTo(membership2); + membership1.setId(null); + assertThat(membership1).isNotEqualTo(membership2); + } + + @Test + @Transactional + public void dtoEqualsVerifier() throws Exception { + TestUtil.equalsVerifier(MembershipDTO.class); + MembershipDTO membershipDTO1 = new MembershipDTO(); + membershipDTO1.setId(1L); + MembershipDTO membershipDTO2 = new MembershipDTO(); + assertThat(membershipDTO1).isNotEqualTo(membershipDTO2); + membershipDTO2.setId(membershipDTO1.getId()); + assertThat(membershipDTO1).isEqualTo(membershipDTO2); + membershipDTO2.setId(2L); + assertThat(membershipDTO1).isNotEqualTo(membershipDTO2); + membershipDTO1.setId(null); + assertThat(membershipDTO1).isNotEqualTo(membershipDTO2); + } + + @Test + @Transactional + public void testEntityFromId() { + assertThat(membershipMapper.fromId(42L).getId()).isEqualTo(42); + assertThat(membershipMapper.fromId(null)).isNull(); + } +} diff --git a/src/test/java/org/hostsharing/hsadminng/web/rest/ShareResourceIntTest.java b/src/test/java/org/hostsharing/hsadminng/web/rest/ShareResourceIntTest.java new file mode 100644 index 00000000..cfa92566 --- /dev/null +++ b/src/test/java/org/hostsharing/hsadminng/web/rest/ShareResourceIntTest.java @@ -0,0 +1,642 @@ +package org.hostsharing.hsadminng.web.rest; + +import org.hostsharing.hsadminng.HsadminNgApp; + +import org.hostsharing.hsadminng.domain.Share; +import org.hostsharing.hsadminng.domain.Membership; +import org.hostsharing.hsadminng.repository.ShareRepository; +import org.hostsharing.hsadminng.service.ShareService; +import org.hostsharing.hsadminng.service.dto.ShareDTO; +import org.hostsharing.hsadminng.service.mapper.ShareMapper; +import org.hostsharing.hsadminng.web.rest.errors.ExceptionTranslator; +import org.hostsharing.hsadminng.service.dto.ShareCriteria; +import org.hostsharing.hsadminng.service.ShareQueryService; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.Validator; + +import javax.persistence.EntityManager; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.List; + + +import static org.hostsharing.hsadminng.web.rest.TestUtil.createFormattingConversionService; +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.hostsharing.hsadminng.domain.enumeration.ShareAction; +/** + * Test class for the ShareResource REST controller. + * + * @see ShareResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = HsadminNgApp.class) +public class ShareResourceIntTest { + + private static final LocalDate DEFAULT_DATE = LocalDate.ofEpochDay(0L); + private static final LocalDate UPDATED_DATE = LocalDate.now(ZoneId.systemDefault()); + + private static final ShareAction DEFAULT_ACTION = ShareAction.SUBSCRIPTION; + private static final ShareAction UPDATED_ACTION = ShareAction.CANCELLATION; + + private static final Integer DEFAULT_QUANTITY = 1; + private static final Integer UPDATED_QUANTITY = 2; + + private static final String DEFAULT_COMMENT = "AAAAAAAAAA"; + private static final String UPDATED_COMMENT = "BBBBBBBBBB"; + + @Autowired + private ShareRepository shareRepository; + + @Autowired + private ShareMapper shareMapper; + + @Autowired + private ShareService shareService; + + @Autowired + private ShareQueryService shareQueryService; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private EntityManager em; + + @Autowired + private Validator validator; + + private MockMvc restShareMockMvc; + + private Share share; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + final ShareResource shareResource = new ShareResource(shareService, shareQueryService); + this.restShareMockMvc = MockMvcBuilders.standaloneSetup(shareResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setControllerAdvice(exceptionTranslator) + .setConversionService(createFormattingConversionService()) + .setMessageConverters(jacksonMessageConverter) + .setValidator(validator).build(); + } + + /** + * Create an entity for this test. + * + * This is a static method, as tests for other entities might also need it, + * if they test an entity which requires the current entity. + */ + public static Share createEntity(EntityManager em) { + Share share = new Share() + .date(DEFAULT_DATE) + .action(DEFAULT_ACTION) + .quantity(DEFAULT_QUANTITY) + .comment(DEFAULT_COMMENT); + return share; + } + + @Before + public void initTest() { + share = createEntity(em); + } + + @Test + @Transactional + public void createShare() throws Exception { + int databaseSizeBeforeCreate = shareRepository.findAll().size(); + + // Create the Share + ShareDTO shareDTO = shareMapper.toDto(share); + restShareMockMvc.perform(post("/api/shares") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(shareDTO))) + .andExpect(status().isCreated()); + + // Validate the Share in the database + List shareList = shareRepository.findAll(); + assertThat(shareList).hasSize(databaseSizeBeforeCreate + 1); + Share testShare = shareList.get(shareList.size() - 1); + assertThat(testShare.getDate()).isEqualTo(DEFAULT_DATE); + assertThat(testShare.getAction()).isEqualTo(DEFAULT_ACTION); + assertThat(testShare.getQuantity()).isEqualTo(DEFAULT_QUANTITY); + assertThat(testShare.getComment()).isEqualTo(DEFAULT_COMMENT); + } + + @Test + @Transactional + public void createShareWithExistingId() throws Exception { + int databaseSizeBeforeCreate = shareRepository.findAll().size(); + + // Create the Share with an existing ID + share.setId(1L); + ShareDTO shareDTO = shareMapper.toDto(share); + + // An entity with an existing ID cannot be created, so this API call must fail + restShareMockMvc.perform(post("/api/shares") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(shareDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Share in the database + List shareList = shareRepository.findAll(); + assertThat(shareList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void checkDateIsRequired() throws Exception { + int databaseSizeBeforeTest = shareRepository.findAll().size(); + // set the field null + share.setDate(null); + + // Create the Share, which fails. + ShareDTO shareDTO = shareMapper.toDto(share); + + restShareMockMvc.perform(post("/api/shares") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(shareDTO))) + .andExpect(status().isBadRequest()); + + List shareList = shareRepository.findAll(); + assertThat(shareList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkActionIsRequired() throws Exception { + int databaseSizeBeforeTest = shareRepository.findAll().size(); + // set the field null + share.setAction(null); + + // Create the Share, which fails. + ShareDTO shareDTO = shareMapper.toDto(share); + + restShareMockMvc.perform(post("/api/shares") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(shareDTO))) + .andExpect(status().isBadRequest()); + + List shareList = shareRepository.findAll(); + assertThat(shareList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkQuantityIsRequired() throws Exception { + int databaseSizeBeforeTest = shareRepository.findAll().size(); + // set the field null + share.setQuantity(null); + + // Create the Share, which fails. + ShareDTO shareDTO = shareMapper.toDto(share); + + restShareMockMvc.perform(post("/api/shares") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(shareDTO))) + .andExpect(status().isBadRequest()); + + List shareList = shareRepository.findAll(); + assertThat(shareList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void getAllShares() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList + restShareMockMvc.perform(get("/api/shares?sort=id,desc")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(share.getId().intValue()))) + .andExpect(jsonPath("$.[*].date").value(hasItem(DEFAULT_DATE.toString()))) + .andExpect(jsonPath("$.[*].action").value(hasItem(DEFAULT_ACTION.toString()))) + .andExpect(jsonPath("$.[*].quantity").value(hasItem(DEFAULT_QUANTITY))) + .andExpect(jsonPath("$.[*].comment").value(hasItem(DEFAULT_COMMENT.toString()))); + } + + @Test + @Transactional + public void getShare() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get the share + restShareMockMvc.perform(get("/api/shares/{id}", share.getId())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.id").value(share.getId().intValue())) + .andExpect(jsonPath("$.date").value(DEFAULT_DATE.toString())) + .andExpect(jsonPath("$.action").value(DEFAULT_ACTION.toString())) + .andExpect(jsonPath("$.quantity").value(DEFAULT_QUANTITY)) + .andExpect(jsonPath("$.comment").value(DEFAULT_COMMENT.toString())); + } + + @Test + @Transactional + public void getAllSharesByDateIsEqualToSomething() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where date equals to DEFAULT_DATE + defaultShareShouldBeFound("date.equals=" + DEFAULT_DATE); + + // Get all the shareList where date equals to UPDATED_DATE + defaultShareShouldNotBeFound("date.equals=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllSharesByDateIsInShouldWork() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where date in DEFAULT_DATE or UPDATED_DATE + defaultShareShouldBeFound("date.in=" + DEFAULT_DATE + "," + UPDATED_DATE); + + // Get all the shareList where date equals to UPDATED_DATE + defaultShareShouldNotBeFound("date.in=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllSharesByDateIsNullOrNotNull() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where date is not null + defaultShareShouldBeFound("date.specified=true"); + + // Get all the shareList where date is null + defaultShareShouldNotBeFound("date.specified=false"); + } + + @Test + @Transactional + public void getAllSharesByDateIsGreaterThanOrEqualToSomething() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where date greater than or equals to DEFAULT_DATE + defaultShareShouldBeFound("date.greaterOrEqualThan=" + DEFAULT_DATE); + + // Get all the shareList where date greater than or equals to UPDATED_DATE + defaultShareShouldNotBeFound("date.greaterOrEqualThan=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllSharesByDateIsLessThanSomething() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where date less than or equals to DEFAULT_DATE + defaultShareShouldNotBeFound("date.lessThan=" + DEFAULT_DATE); + + // Get all the shareList where date less than or equals to UPDATED_DATE + defaultShareShouldBeFound("date.lessThan=" + UPDATED_DATE); + } + + + @Test + @Transactional + public void getAllSharesByActionIsEqualToSomething() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where action equals to DEFAULT_ACTION + defaultShareShouldBeFound("action.equals=" + DEFAULT_ACTION); + + // Get all the shareList where action equals to UPDATED_ACTION + defaultShareShouldNotBeFound("action.equals=" + UPDATED_ACTION); + } + + @Test + @Transactional + public void getAllSharesByActionIsInShouldWork() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where action in DEFAULT_ACTION or UPDATED_ACTION + defaultShareShouldBeFound("action.in=" + DEFAULT_ACTION + "," + UPDATED_ACTION); + + // Get all the shareList where action equals to UPDATED_ACTION + defaultShareShouldNotBeFound("action.in=" + UPDATED_ACTION); + } + + @Test + @Transactional + public void getAllSharesByActionIsNullOrNotNull() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where action is not null + defaultShareShouldBeFound("action.specified=true"); + + // Get all the shareList where action is null + defaultShareShouldNotBeFound("action.specified=false"); + } + + @Test + @Transactional + public void getAllSharesByQuantityIsEqualToSomething() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where quantity equals to DEFAULT_QUANTITY + defaultShareShouldBeFound("quantity.equals=" + DEFAULT_QUANTITY); + + // Get all the shareList where quantity equals to UPDATED_QUANTITY + defaultShareShouldNotBeFound("quantity.equals=" + UPDATED_QUANTITY); + } + + @Test + @Transactional + public void getAllSharesByQuantityIsInShouldWork() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where quantity in DEFAULT_QUANTITY or UPDATED_QUANTITY + defaultShareShouldBeFound("quantity.in=" + DEFAULT_QUANTITY + "," + UPDATED_QUANTITY); + + // Get all the shareList where quantity equals to UPDATED_QUANTITY + defaultShareShouldNotBeFound("quantity.in=" + UPDATED_QUANTITY); + } + + @Test + @Transactional + public void getAllSharesByQuantityIsNullOrNotNull() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where quantity is not null + defaultShareShouldBeFound("quantity.specified=true"); + + // Get all the shareList where quantity is null + defaultShareShouldNotBeFound("quantity.specified=false"); + } + + @Test + @Transactional + public void getAllSharesByQuantityIsGreaterThanOrEqualToSomething() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where quantity greater than or equals to DEFAULT_QUANTITY + defaultShareShouldBeFound("quantity.greaterOrEqualThan=" + DEFAULT_QUANTITY); + + // Get all the shareList where quantity greater than or equals to UPDATED_QUANTITY + defaultShareShouldNotBeFound("quantity.greaterOrEqualThan=" + UPDATED_QUANTITY); + } + + @Test + @Transactional + public void getAllSharesByQuantityIsLessThanSomething() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where quantity less than or equals to DEFAULT_QUANTITY + defaultShareShouldNotBeFound("quantity.lessThan=" + DEFAULT_QUANTITY); + + // Get all the shareList where quantity less than or equals to UPDATED_QUANTITY + defaultShareShouldBeFound("quantity.lessThan=" + UPDATED_QUANTITY); + } + + + @Test + @Transactional + public void getAllSharesByCommentIsEqualToSomething() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where comment equals to DEFAULT_COMMENT + defaultShareShouldBeFound("comment.equals=" + DEFAULT_COMMENT); + + // Get all the shareList where comment equals to UPDATED_COMMENT + defaultShareShouldNotBeFound("comment.equals=" + UPDATED_COMMENT); + } + + @Test + @Transactional + public void getAllSharesByCommentIsInShouldWork() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where comment in DEFAULT_COMMENT or UPDATED_COMMENT + defaultShareShouldBeFound("comment.in=" + DEFAULT_COMMENT + "," + UPDATED_COMMENT); + + // Get all the shareList where comment equals to UPDATED_COMMENT + defaultShareShouldNotBeFound("comment.in=" + UPDATED_COMMENT); + } + + @Test + @Transactional + public void getAllSharesByCommentIsNullOrNotNull() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + // Get all the shareList where comment is not null + defaultShareShouldBeFound("comment.specified=true"); + + // Get all the shareList where comment is null + defaultShareShouldNotBeFound("comment.specified=false"); + } + + @Test + @Transactional + public void getAllSharesByMemberIsEqualToSomething() throws Exception { + // Initialize the database + Membership member = MembershipResourceIntTest.createEntity(em); + em.persist(member); + em.flush(); + share.setMember(member); + shareRepository.saveAndFlush(share); + Long memberId = member.getId(); + + // Get all the shareList where member equals to memberId + defaultShareShouldBeFound("memberId.equals=" + memberId); + + // Get all the shareList where member equals to memberId + 1 + defaultShareShouldNotBeFound("memberId.equals=" + (memberId + 1)); + } + + /** + * Executes the search, and checks that the default entity is returned + */ + private void defaultShareShouldBeFound(String filter) throws Exception { + restShareMockMvc.perform(get("/api/shares?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(share.getId().intValue()))) + .andExpect(jsonPath("$.[*].date").value(hasItem(DEFAULT_DATE.toString()))) + .andExpect(jsonPath("$.[*].action").value(hasItem(DEFAULT_ACTION.toString()))) + .andExpect(jsonPath("$.[*].quantity").value(hasItem(DEFAULT_QUANTITY))) + .andExpect(jsonPath("$.[*].comment").value(hasItem(DEFAULT_COMMENT))); + + // Check, that the count call also returns 1 + restShareMockMvc.perform(get("/api/shares/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("1")); + } + + /** + * Executes the search, and checks that the default entity is not returned + */ + private void defaultShareShouldNotBeFound(String filter) throws Exception { + restShareMockMvc.perform(get("/api/shares?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$").isEmpty()); + + // Check, that the count call also returns 0 + restShareMockMvc.perform(get("/api/shares/count?sort=id,desc&" + filter)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(content().string("0")); + } + + + @Test + @Transactional + public void getNonExistingShare() throws Exception { + // Get the share + restShareMockMvc.perform(get("/api/shares/{id}", Long.MAX_VALUE)) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void updateShare() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + int databaseSizeBeforeUpdate = shareRepository.findAll().size(); + + // Update the share + Share updatedShare = shareRepository.findById(share.getId()).get(); + // Disconnect from session so that the updates on updatedShare are not directly saved in db + em.detach(updatedShare); + updatedShare + .date(UPDATED_DATE) + .action(UPDATED_ACTION) + .quantity(UPDATED_QUANTITY) + .comment(UPDATED_COMMENT); + ShareDTO shareDTO = shareMapper.toDto(updatedShare); + + restShareMockMvc.perform(put("/api/shares") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(shareDTO))) + .andExpect(status().isOk()); + + // Validate the Share in the database + List shareList = shareRepository.findAll(); + assertThat(shareList).hasSize(databaseSizeBeforeUpdate); + Share testShare = shareList.get(shareList.size() - 1); + assertThat(testShare.getDate()).isEqualTo(UPDATED_DATE); + assertThat(testShare.getAction()).isEqualTo(UPDATED_ACTION); + assertThat(testShare.getQuantity()).isEqualTo(UPDATED_QUANTITY); + assertThat(testShare.getComment()).isEqualTo(UPDATED_COMMENT); + } + + @Test + @Transactional + public void updateNonExistingShare() throws Exception { + int databaseSizeBeforeUpdate = shareRepository.findAll().size(); + + // Create the Share + ShareDTO shareDTO = shareMapper.toDto(share); + + // If the entity doesn't have an ID, it will throw BadRequestAlertException + restShareMockMvc.perform(put("/api/shares") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(shareDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Share in the database + List shareList = shareRepository.findAll(); + assertThat(shareList).hasSize(databaseSizeBeforeUpdate); + } + + @Test + @Transactional + public void deleteShare() throws Exception { + // Initialize the database + shareRepository.saveAndFlush(share); + + int databaseSizeBeforeDelete = shareRepository.findAll().size(); + + // Delete the share + restShareMockMvc.perform(delete("/api/shares/{id}", share.getId()) + .accept(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()); + + // Validate the database is empty + List shareList = shareRepository.findAll(); + assertThat(shareList).hasSize(databaseSizeBeforeDelete - 1); + } + + @Test + @Transactional + public void equalsVerifier() throws Exception { + TestUtil.equalsVerifier(Share.class); + Share share1 = new Share(); + share1.setId(1L); + Share share2 = new Share(); + share2.setId(share1.getId()); + assertThat(share1).isEqualTo(share2); + share2.setId(2L); + assertThat(share1).isNotEqualTo(share2); + share1.setId(null); + assertThat(share1).isNotEqualTo(share2); + } + + @Test + @Transactional + public void dtoEqualsVerifier() throws Exception { + TestUtil.equalsVerifier(ShareDTO.class); + ShareDTO shareDTO1 = new ShareDTO(); + shareDTO1.setId(1L); + ShareDTO shareDTO2 = new ShareDTO(); + assertThat(shareDTO1).isNotEqualTo(shareDTO2); + shareDTO2.setId(shareDTO1.getId()); + assertThat(shareDTO1).isEqualTo(shareDTO2); + shareDTO2.setId(2L); + assertThat(shareDTO1).isNotEqualTo(shareDTO2); + shareDTO1.setId(null); + assertThat(shareDTO1).isNotEqualTo(shareDTO2); + } + + @Test + @Transactional + public void testEntityFromId() { + assertThat(shareMapper.fromId(42L).getId()).isEqualTo(42); + assertThat(shareMapper.fromId(null)).isNull(); + } +} diff --git a/src/test/javascript/spec/app/entities/asset/asset-delete-dialog.component.spec.ts b/src/test/javascript/spec/app/entities/asset/asset-delete-dialog.component.spec.ts new file mode 100644 index 00000000..26ab4fb0 --- /dev/null +++ b/src/test/javascript/spec/app/entities/asset/asset-delete-dialog.component.spec.ts @@ -0,0 +1,52 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Observable, of } from 'rxjs'; +import { JhiEventManager } from 'ng-jhipster'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { AssetDeleteDialogComponent } from 'app/entities/asset/asset-delete-dialog.component'; +import { AssetService } from 'app/entities/asset/asset.service'; + +describe('Component Tests', () => { + describe('Asset Management Delete Component', () => { + let comp: AssetDeleteDialogComponent; + let fixture: ComponentFixture; + let service: AssetService; + let mockEventManager: any; + let mockActiveModal: any; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [AssetDeleteDialogComponent] + }) + .overrideTemplate(AssetDeleteDialogComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(AssetDeleteDialogComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(AssetService); + mockEventManager = fixture.debugElement.injector.get(JhiEventManager); + mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); + }); + + describe('confirmDelete', () => { + it('Should call delete service on confirmDelete', inject( + [], + fakeAsync(() => { + // GIVEN + spyOn(service, 'delete').and.returnValue(of({})); + + // WHEN + comp.confirmDelete(123); + tick(); + + // THEN + expect(service.delete).toHaveBeenCalledWith(123); + expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); + expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); + }) + )); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/asset/asset-detail.component.spec.ts b/src/test/javascript/spec/app/entities/asset/asset-detail.component.spec.ts new file mode 100644 index 00000000..8d176985 --- /dev/null +++ b/src/test/javascript/spec/app/entities/asset/asset-detail.component.spec.ts @@ -0,0 +1,40 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { AssetDetailComponent } from 'app/entities/asset/asset-detail.component'; +import { Asset } from 'app/shared/model/asset.model'; + +describe('Component Tests', () => { + describe('Asset Management Detail Component', () => { + let comp: AssetDetailComponent; + let fixture: ComponentFixture; + const route = ({ data: of({ asset: new Asset(123) }) } as any) as ActivatedRoute; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [AssetDetailComponent], + providers: [{ provide: ActivatedRoute, useValue: route }] + }) + .overrideTemplate(AssetDetailComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(AssetDetailComponent); + comp = fixture.componentInstance; + }); + + describe('OnInit', () => { + it('Should call load all on init', () => { + // GIVEN + + // WHEN + comp.ngOnInit(); + + // THEN + expect(comp.asset).toEqual(jasmine.objectContaining({ id: 123 })); + }); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/asset/asset-update.component.spec.ts b/src/test/javascript/spec/app/entities/asset/asset-update.component.spec.ts new file mode 100644 index 00000000..20bcdf53 --- /dev/null +++ b/src/test/javascript/spec/app/entities/asset/asset-update.component.spec.ts @@ -0,0 +1,60 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { HttpResponse } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { AssetUpdateComponent } from 'app/entities/asset/asset-update.component'; +import { AssetService } from 'app/entities/asset/asset.service'; +import { Asset } from 'app/shared/model/asset.model'; + +describe('Component Tests', () => { + describe('Asset Management Update Component', () => { + let comp: AssetUpdateComponent; + let fixture: ComponentFixture; + let service: AssetService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [AssetUpdateComponent] + }) + .overrideTemplate(AssetUpdateComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(AssetUpdateComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(AssetService); + }); + + describe('save', () => { + it('Should call update service on save for existing entity', fakeAsync(() => { + // GIVEN + const entity = new Asset(123); + spyOn(service, 'update').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.asset = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.update).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + + it('Should call create service on save for new entity', fakeAsync(() => { + // GIVEN + const entity = new Asset(); + spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.asset = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.create).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/asset/asset.component.spec.ts b/src/test/javascript/spec/app/entities/asset/asset.component.spec.ts new file mode 100644 index 00000000..c8afd397 --- /dev/null +++ b/src/test/javascript/spec/app/entities/asset/asset.component.spec.ts @@ -0,0 +1,128 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; +import { ActivatedRoute, Data } from '@angular/router'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { AssetComponent } from 'app/entities/asset/asset.component'; +import { AssetService } from 'app/entities/asset/asset.service'; +import { Asset } from 'app/shared/model/asset.model'; + +describe('Component Tests', () => { + describe('Asset Management Component', () => { + let comp: AssetComponent; + let fixture: ComponentFixture; + let service: AssetService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [AssetComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: { + data: { + subscribe: (fn: (value: Data) => void) => + fn({ + pagingParams: { + predicate: 'id', + reverse: false, + page: 0 + } + }) + } + } + } + ] + }) + .overrideTemplate(AssetComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(AssetComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(AssetService); + }); + + it('Should call load all on init', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Asset(123)], + headers + }) + ) + ); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.assets[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should load a page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Asset(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.assets[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should re-initialize the page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Asset(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + comp.reset(); + + // THEN + expect(comp.page).toEqual(0); + expect(service.query).toHaveBeenCalledTimes(2); + expect(comp.assets[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + it('should calculate the sort attribute for an id', () => { + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['id,asc']); + }); + + it('should calculate the sort attribute for a non-id attribute', () => { + // GIVEN + comp.predicate = 'name'; + + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['name,asc', 'id']); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/asset/asset.service.spec.ts b/src/test/javascript/spec/app/entities/asset/asset.service.spec.ts new file mode 100644 index 00000000..99eabace --- /dev/null +++ b/src/test/javascript/spec/app/entities/asset/asset.service.spec.ts @@ -0,0 +1,135 @@ +/* tslint:disable max-line-length */ +import { TestBed, getTestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { of } from 'rxjs'; +import { take, map } from 'rxjs/operators'; +import * as moment from 'moment'; +import { DATE_FORMAT } from 'app/shared/constants/input.constants'; +import { AssetService } from 'app/entities/asset/asset.service'; +import { IAsset, Asset, AssetAction } from 'app/shared/model/asset.model'; + +describe('Service Tests', () => { + describe('Asset Service', () => { + let injector: TestBed; + let service: AssetService; + let httpMock: HttpTestingController; + let elemDefault: IAsset; + let currentDate: moment.Moment; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + }); + injector = getTestBed(); + service = injector.get(AssetService); + httpMock = injector.get(HttpTestingController); + currentDate = moment(); + + elemDefault = new Asset(0, currentDate, AssetAction.PAYMENT, 0, 'AAAAAAA'); + }); + + describe('Service methods', async () => { + it('should find an element', async () => { + const returnedFromService = Object.assign( + { + date: currentDate.format(DATE_FORMAT) + }, + elemDefault + ); + service + .find(123) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: elemDefault })); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should create a Asset', async () => { + const returnedFromService = Object.assign( + { + id: 0, + date: currentDate.format(DATE_FORMAT) + }, + elemDefault + ); + const expected = Object.assign( + { + date: currentDate + }, + returnedFromService + ); + service + .create(new Asset(null)) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'POST' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should update a Asset', async () => { + const returnedFromService = Object.assign( + { + date: currentDate.format(DATE_FORMAT), + action: 'BBBBBB', + amount: 1, + comment: 'BBBBBB' + }, + elemDefault + ); + + const expected = Object.assign( + { + date: currentDate + }, + returnedFromService + ); + service + .update(expected) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'PUT' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should return a list of Asset', async () => { + const returnedFromService = Object.assign( + { + date: currentDate.format(DATE_FORMAT), + action: 'BBBBBB', + amount: 1, + comment: 'BBBBBB' + }, + elemDefault + ); + const expected = Object.assign( + { + date: currentDate + }, + returnedFromService + ); + service + .query(expected) + .pipe( + take(1), + map(resp => resp.body) + ) + .subscribe(body => expect(body).toContainEqual(expected)); + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify([returnedFromService])); + httpMock.verify(); + }); + + it('should delete a Asset', async () => { + const rxPromise = service.delete(123).subscribe(resp => expect(resp.ok)); + + const req = httpMock.expectOne({ method: 'DELETE' }); + req.flush({ status: 200 }); + }); + }); + + afterEach(() => { + httpMock.verify(); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/contact/contact-delete-dialog.component.spec.ts b/src/test/javascript/spec/app/entities/contact/contact-delete-dialog.component.spec.ts new file mode 100644 index 00000000..1c572ff0 --- /dev/null +++ b/src/test/javascript/spec/app/entities/contact/contact-delete-dialog.component.spec.ts @@ -0,0 +1,52 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Observable, of } from 'rxjs'; +import { JhiEventManager } from 'ng-jhipster'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { ContactDeleteDialogComponent } from 'app/entities/contact/contact-delete-dialog.component'; +import { ContactService } from 'app/entities/contact/contact.service'; + +describe('Component Tests', () => { + describe('Contact Management Delete Component', () => { + let comp: ContactDeleteDialogComponent; + let fixture: ComponentFixture; + let service: ContactService; + let mockEventManager: any; + let mockActiveModal: any; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [ContactDeleteDialogComponent] + }) + .overrideTemplate(ContactDeleteDialogComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(ContactDeleteDialogComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(ContactService); + mockEventManager = fixture.debugElement.injector.get(JhiEventManager); + mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); + }); + + describe('confirmDelete', () => { + it('Should call delete service on confirmDelete', inject( + [], + fakeAsync(() => { + // GIVEN + spyOn(service, 'delete').and.returnValue(of({})); + + // WHEN + comp.confirmDelete(123); + tick(); + + // THEN + expect(service.delete).toHaveBeenCalledWith(123); + expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); + expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); + }) + )); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/contact/contact-detail.component.spec.ts b/src/test/javascript/spec/app/entities/contact/contact-detail.component.spec.ts new file mode 100644 index 00000000..f269a672 --- /dev/null +++ b/src/test/javascript/spec/app/entities/contact/contact-detail.component.spec.ts @@ -0,0 +1,40 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { ContactDetailComponent } from 'app/entities/contact/contact-detail.component'; +import { Contact } from 'app/shared/model/contact.model'; + +describe('Component Tests', () => { + describe('Contact Management Detail Component', () => { + let comp: ContactDetailComponent; + let fixture: ComponentFixture; + const route = ({ data: of({ contact: new Contact(123) }) } as any) as ActivatedRoute; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [ContactDetailComponent], + providers: [{ provide: ActivatedRoute, useValue: route }] + }) + .overrideTemplate(ContactDetailComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(ContactDetailComponent); + comp = fixture.componentInstance; + }); + + describe('OnInit', () => { + it('Should call load all on init', () => { + // GIVEN + + // WHEN + comp.ngOnInit(); + + // THEN + expect(comp.contact).toEqual(jasmine.objectContaining({ id: 123 })); + }); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/contact/contact-update.component.spec.ts b/src/test/javascript/spec/app/entities/contact/contact-update.component.spec.ts new file mode 100644 index 00000000..3cd83c3d --- /dev/null +++ b/src/test/javascript/spec/app/entities/contact/contact-update.component.spec.ts @@ -0,0 +1,60 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { HttpResponse } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { ContactUpdateComponent } from 'app/entities/contact/contact-update.component'; +import { ContactService } from 'app/entities/contact/contact.service'; +import { Contact } from 'app/shared/model/contact.model'; + +describe('Component Tests', () => { + describe('Contact Management Update Component', () => { + let comp: ContactUpdateComponent; + let fixture: ComponentFixture; + let service: ContactService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [ContactUpdateComponent] + }) + .overrideTemplate(ContactUpdateComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(ContactUpdateComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(ContactService); + }); + + describe('save', () => { + it('Should call update service on save for existing entity', fakeAsync(() => { + // GIVEN + const entity = new Contact(123); + spyOn(service, 'update').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.contact = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.update).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + + it('Should call create service on save for new entity', fakeAsync(() => { + // GIVEN + const entity = new Contact(); + spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.contact = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.create).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/contact/contact.component.spec.ts b/src/test/javascript/spec/app/entities/contact/contact.component.spec.ts new file mode 100644 index 00000000..86c74058 --- /dev/null +++ b/src/test/javascript/spec/app/entities/contact/contact.component.spec.ts @@ -0,0 +1,128 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; +import { ActivatedRoute, Data } from '@angular/router'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { ContactComponent } from 'app/entities/contact/contact.component'; +import { ContactService } from 'app/entities/contact/contact.service'; +import { Contact } from 'app/shared/model/contact.model'; + +describe('Component Tests', () => { + describe('Contact Management Component', () => { + let comp: ContactComponent; + let fixture: ComponentFixture; + let service: ContactService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [ContactComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: { + data: { + subscribe: (fn: (value: Data) => void) => + fn({ + pagingParams: { + predicate: 'id', + reverse: false, + page: 0 + } + }) + } + } + } + ] + }) + .overrideTemplate(ContactComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(ContactComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(ContactService); + }); + + it('Should call load all on init', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Contact(123)], + headers + }) + ) + ); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.contacts[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should load a page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Contact(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.contacts[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should re-initialize the page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Contact(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + comp.reset(); + + // THEN + expect(comp.page).toEqual(0); + expect(service.query).toHaveBeenCalledTimes(2); + expect(comp.contacts[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + it('should calculate the sort attribute for an id', () => { + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['id,asc']); + }); + + it('should calculate the sort attribute for a non-id attribute', () => { + // GIVEN + comp.predicate = 'name'; + + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['name,asc', 'id']); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/contact/contact.service.spec.ts b/src/test/javascript/spec/app/entities/contact/contact.service.spec.ts new file mode 100644 index 00000000..5e912840 --- /dev/null +++ b/src/test/javascript/spec/app/entities/contact/contact.service.spec.ts @@ -0,0 +1,108 @@ +/* tslint:disable max-line-length */ +import { TestBed, getTestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { of } from 'rxjs'; +import { take, map } from 'rxjs/operators'; +import { ContactService } from 'app/entities/contact/contact.service'; +import { IContact, Contact } from 'app/shared/model/contact.model'; + +describe('Service Tests', () => { + describe('Contact Service', () => { + let injector: TestBed; + let service: ContactService; + let httpMock: HttpTestingController; + let elemDefault: IContact; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + }); + injector = getTestBed(); + service = injector.get(ContactService); + httpMock = injector.get(HttpTestingController); + + elemDefault = new Contact(0, 'AAAAAAA', 'AAAAAAA', 'AAAAAAA'); + }); + + describe('Service methods', async () => { + it('should find an element', async () => { + const returnedFromService = Object.assign({}, elemDefault); + service + .find(123) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: elemDefault })); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should create a Contact', async () => { + const returnedFromService = Object.assign( + { + id: 0 + }, + elemDefault + ); + const expected = Object.assign({}, returnedFromService); + service + .create(new Contact(null)) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'POST' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should update a Contact', async () => { + const returnedFromService = Object.assign( + { + firstName: 'BBBBBB', + lastName: 'BBBBBB', + email: 'BBBBBB' + }, + elemDefault + ); + + const expected = Object.assign({}, returnedFromService); + service + .update(expected) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'PUT' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should return a list of Contact', async () => { + const returnedFromService = Object.assign( + { + firstName: 'BBBBBB', + lastName: 'BBBBBB', + email: 'BBBBBB' + }, + elemDefault + ); + const expected = Object.assign({}, returnedFromService); + service + .query(expected) + .pipe( + take(1), + map(resp => resp.body) + ) + .subscribe(body => expect(body).toContainEqual(expected)); + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify([returnedFromService])); + httpMock.verify(); + }); + + it('should delete a Contact', async () => { + const rxPromise = service.delete(123).subscribe(resp => expect(resp.ok)); + + const req = httpMock.expectOne({ method: 'DELETE' }); + req.flush({ status: 200 }); + }); + }); + + afterEach(() => { + httpMock.verify(); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/customer-contact/customer-contact-delete-dialog.component.spec.ts b/src/test/javascript/spec/app/entities/customer-contact/customer-contact-delete-dialog.component.spec.ts new file mode 100644 index 00000000..57ab1ea5 --- /dev/null +++ b/src/test/javascript/spec/app/entities/customer-contact/customer-contact-delete-dialog.component.spec.ts @@ -0,0 +1,52 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Observable, of } from 'rxjs'; +import { JhiEventManager } from 'ng-jhipster'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { CustomerContactDeleteDialogComponent } from 'app/entities/customer-contact/customer-contact-delete-dialog.component'; +import { CustomerContactService } from 'app/entities/customer-contact/customer-contact.service'; + +describe('Component Tests', () => { + describe('CustomerContact Management Delete Component', () => { + let comp: CustomerContactDeleteDialogComponent; + let fixture: ComponentFixture; + let service: CustomerContactService; + let mockEventManager: any; + let mockActiveModal: any; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [CustomerContactDeleteDialogComponent] + }) + .overrideTemplate(CustomerContactDeleteDialogComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(CustomerContactDeleteDialogComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(CustomerContactService); + mockEventManager = fixture.debugElement.injector.get(JhiEventManager); + mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); + }); + + describe('confirmDelete', () => { + it('Should call delete service on confirmDelete', inject( + [], + fakeAsync(() => { + // GIVEN + spyOn(service, 'delete').and.returnValue(of({})); + + // WHEN + comp.confirmDelete(123); + tick(); + + // THEN + expect(service.delete).toHaveBeenCalledWith(123); + expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); + expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); + }) + )); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/customer-contact/customer-contact-detail.component.spec.ts b/src/test/javascript/spec/app/entities/customer-contact/customer-contact-detail.component.spec.ts new file mode 100644 index 00000000..54e11abc --- /dev/null +++ b/src/test/javascript/spec/app/entities/customer-contact/customer-contact-detail.component.spec.ts @@ -0,0 +1,40 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { CustomerContactDetailComponent } from 'app/entities/customer-contact/customer-contact-detail.component'; +import { CustomerContact } from 'app/shared/model/customer-contact.model'; + +describe('Component Tests', () => { + describe('CustomerContact Management Detail Component', () => { + let comp: CustomerContactDetailComponent; + let fixture: ComponentFixture; + const route = ({ data: of({ customerContact: new CustomerContact(123) }) } as any) as ActivatedRoute; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [CustomerContactDetailComponent], + providers: [{ provide: ActivatedRoute, useValue: route }] + }) + .overrideTemplate(CustomerContactDetailComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(CustomerContactDetailComponent); + comp = fixture.componentInstance; + }); + + describe('OnInit', () => { + it('Should call load all on init', () => { + // GIVEN + + // WHEN + comp.ngOnInit(); + + // THEN + expect(comp.customerContact).toEqual(jasmine.objectContaining({ id: 123 })); + }); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/customer-contact/customer-contact-update.component.spec.ts b/src/test/javascript/spec/app/entities/customer-contact/customer-contact-update.component.spec.ts new file mode 100644 index 00000000..9c73dbb8 --- /dev/null +++ b/src/test/javascript/spec/app/entities/customer-contact/customer-contact-update.component.spec.ts @@ -0,0 +1,60 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { HttpResponse } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { CustomerContactUpdateComponent } from 'app/entities/customer-contact/customer-contact-update.component'; +import { CustomerContactService } from 'app/entities/customer-contact/customer-contact.service'; +import { CustomerContact } from 'app/shared/model/customer-contact.model'; + +describe('Component Tests', () => { + describe('CustomerContact Management Update Component', () => { + let comp: CustomerContactUpdateComponent; + let fixture: ComponentFixture; + let service: CustomerContactService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [CustomerContactUpdateComponent] + }) + .overrideTemplate(CustomerContactUpdateComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(CustomerContactUpdateComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(CustomerContactService); + }); + + describe('save', () => { + it('Should call update service on save for existing entity', fakeAsync(() => { + // GIVEN + const entity = new CustomerContact(123); + spyOn(service, 'update').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.customerContact = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.update).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + + it('Should call create service on save for new entity', fakeAsync(() => { + // GIVEN + const entity = new CustomerContact(); + spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.customerContact = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.create).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/customer-contact/customer-contact.component.spec.ts b/src/test/javascript/spec/app/entities/customer-contact/customer-contact.component.spec.ts new file mode 100644 index 00000000..1d0649ef --- /dev/null +++ b/src/test/javascript/spec/app/entities/customer-contact/customer-contact.component.spec.ts @@ -0,0 +1,128 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; +import { ActivatedRoute, Data } from '@angular/router'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { CustomerContactComponent } from 'app/entities/customer-contact/customer-contact.component'; +import { CustomerContactService } from 'app/entities/customer-contact/customer-contact.service'; +import { CustomerContact } from 'app/shared/model/customer-contact.model'; + +describe('Component Tests', () => { + describe('CustomerContact Management Component', () => { + let comp: CustomerContactComponent; + let fixture: ComponentFixture; + let service: CustomerContactService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [CustomerContactComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: { + data: { + subscribe: (fn: (value: Data) => void) => + fn({ + pagingParams: { + predicate: 'id', + reverse: false, + page: 0 + } + }) + } + } + } + ] + }) + .overrideTemplate(CustomerContactComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(CustomerContactComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(CustomerContactService); + }); + + it('Should call load all on init', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new CustomerContact(123)], + headers + }) + ) + ); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.customerContacts[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should load a page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new CustomerContact(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.customerContacts[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should re-initialize the page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new CustomerContact(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + comp.reset(); + + // THEN + expect(comp.page).toEqual(0); + expect(service.query).toHaveBeenCalledTimes(2); + expect(comp.customerContacts[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + it('should calculate the sort attribute for an id', () => { + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['id,asc']); + }); + + it('should calculate the sort attribute for a non-id attribute', () => { + // GIVEN + comp.predicate = 'name'; + + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['name,asc', 'id']); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/customer-contact/customer-contact.service.spec.ts b/src/test/javascript/spec/app/entities/customer-contact/customer-contact.service.spec.ts new file mode 100644 index 00000000..f31d85b9 --- /dev/null +++ b/src/test/javascript/spec/app/entities/customer-contact/customer-contact.service.spec.ts @@ -0,0 +1,104 @@ +/* tslint:disable max-line-length */ +import { TestBed, getTestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { of } from 'rxjs'; +import { take, map } from 'rxjs/operators'; +import { CustomerContactService } from 'app/entities/customer-contact/customer-contact.service'; +import { ICustomerContact, CustomerContact, CustomerContactRole } from 'app/shared/model/customer-contact.model'; + +describe('Service Tests', () => { + describe('CustomerContact Service', () => { + let injector: TestBed; + let service: CustomerContactService; + let httpMock: HttpTestingController; + let elemDefault: ICustomerContact; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + }); + injector = getTestBed(); + service = injector.get(CustomerContactService); + httpMock = injector.get(HttpTestingController); + + elemDefault = new CustomerContact(0, CustomerContactRole.CONTRACTUAL); + }); + + describe('Service methods', async () => { + it('should find an element', async () => { + const returnedFromService = Object.assign({}, elemDefault); + service + .find(123) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: elemDefault })); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should create a CustomerContact', async () => { + const returnedFromService = Object.assign( + { + id: 0 + }, + elemDefault + ); + const expected = Object.assign({}, returnedFromService); + service + .create(new CustomerContact(null)) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'POST' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should update a CustomerContact', async () => { + const returnedFromService = Object.assign( + { + role: 'BBBBBB' + }, + elemDefault + ); + + const expected = Object.assign({}, returnedFromService); + service + .update(expected) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'PUT' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should return a list of CustomerContact', async () => { + const returnedFromService = Object.assign( + { + role: 'BBBBBB' + }, + elemDefault + ); + const expected = Object.assign({}, returnedFromService); + service + .query(expected) + .pipe( + take(1), + map(resp => resp.body) + ) + .subscribe(body => expect(body).toContainEqual(expected)); + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify([returnedFromService])); + httpMock.verify(); + }); + + it('should delete a CustomerContact', async () => { + const rxPromise = service.delete(123).subscribe(resp => expect(resp.ok)); + + const req = httpMock.expectOne({ method: 'DELETE' }); + req.flush({ status: 200 }); + }); + }); + + afterEach(() => { + httpMock.verify(); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/customer/customer-delete-dialog.component.spec.ts b/src/test/javascript/spec/app/entities/customer/customer-delete-dialog.component.spec.ts new file mode 100644 index 00000000..7b4f83cc --- /dev/null +++ b/src/test/javascript/spec/app/entities/customer/customer-delete-dialog.component.spec.ts @@ -0,0 +1,52 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Observable, of } from 'rxjs'; +import { JhiEventManager } from 'ng-jhipster'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { CustomerDeleteDialogComponent } from 'app/entities/customer/customer-delete-dialog.component'; +import { CustomerService } from 'app/entities/customer/customer.service'; + +describe('Component Tests', () => { + describe('Customer Management Delete Component', () => { + let comp: CustomerDeleteDialogComponent; + let fixture: ComponentFixture; + let service: CustomerService; + let mockEventManager: any; + let mockActiveModal: any; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [CustomerDeleteDialogComponent] + }) + .overrideTemplate(CustomerDeleteDialogComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(CustomerDeleteDialogComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(CustomerService); + mockEventManager = fixture.debugElement.injector.get(JhiEventManager); + mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); + }); + + describe('confirmDelete', () => { + it('Should call delete service on confirmDelete', inject( + [], + fakeAsync(() => { + // GIVEN + spyOn(service, 'delete').and.returnValue(of({})); + + // WHEN + comp.confirmDelete(123); + tick(); + + // THEN + expect(service.delete).toHaveBeenCalledWith(123); + expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); + expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); + }) + )); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/customer/customer-detail.component.spec.ts b/src/test/javascript/spec/app/entities/customer/customer-detail.component.spec.ts new file mode 100644 index 00000000..1e4506ac --- /dev/null +++ b/src/test/javascript/spec/app/entities/customer/customer-detail.component.spec.ts @@ -0,0 +1,40 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { CustomerDetailComponent } from 'app/entities/customer/customer-detail.component'; +import { Customer } from 'app/shared/model/customer.model'; + +describe('Component Tests', () => { + describe('Customer Management Detail Component', () => { + let comp: CustomerDetailComponent; + let fixture: ComponentFixture; + const route = ({ data: of({ customer: new Customer(123) }) } as any) as ActivatedRoute; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [CustomerDetailComponent], + providers: [{ provide: ActivatedRoute, useValue: route }] + }) + .overrideTemplate(CustomerDetailComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(CustomerDetailComponent); + comp = fixture.componentInstance; + }); + + describe('OnInit', () => { + it('Should call load all on init', () => { + // GIVEN + + // WHEN + comp.ngOnInit(); + + // THEN + expect(comp.customer).toEqual(jasmine.objectContaining({ id: 123 })); + }); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/customer/customer-update.component.spec.ts b/src/test/javascript/spec/app/entities/customer/customer-update.component.spec.ts new file mode 100644 index 00000000..e50a46df --- /dev/null +++ b/src/test/javascript/spec/app/entities/customer/customer-update.component.spec.ts @@ -0,0 +1,60 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { HttpResponse } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { CustomerUpdateComponent } from 'app/entities/customer/customer-update.component'; +import { CustomerService } from 'app/entities/customer/customer.service'; +import { Customer } from 'app/shared/model/customer.model'; + +describe('Component Tests', () => { + describe('Customer Management Update Component', () => { + let comp: CustomerUpdateComponent; + let fixture: ComponentFixture; + let service: CustomerService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [CustomerUpdateComponent] + }) + .overrideTemplate(CustomerUpdateComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(CustomerUpdateComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(CustomerService); + }); + + describe('save', () => { + it('Should call update service on save for existing entity', fakeAsync(() => { + // GIVEN + const entity = new Customer(123); + spyOn(service, 'update').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.customer = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.update).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + + it('Should call create service on save for new entity', fakeAsync(() => { + // GIVEN + const entity = new Customer(); + spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.customer = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.create).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/customer/customer.component.spec.ts b/src/test/javascript/spec/app/entities/customer/customer.component.spec.ts new file mode 100644 index 00000000..414db92f --- /dev/null +++ b/src/test/javascript/spec/app/entities/customer/customer.component.spec.ts @@ -0,0 +1,128 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; +import { ActivatedRoute, Data } from '@angular/router'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { CustomerComponent } from 'app/entities/customer/customer.component'; +import { CustomerService } from 'app/entities/customer/customer.service'; +import { Customer } from 'app/shared/model/customer.model'; + +describe('Component Tests', () => { + describe('Customer Management Component', () => { + let comp: CustomerComponent; + let fixture: ComponentFixture; + let service: CustomerService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [CustomerComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: { + data: { + subscribe: (fn: (value: Data) => void) => + fn({ + pagingParams: { + predicate: 'id', + reverse: false, + page: 0 + } + }) + } + } + } + ] + }) + .overrideTemplate(CustomerComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(CustomerComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(CustomerService); + }); + + it('Should call load all on init', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Customer(123)], + headers + }) + ) + ); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.customers[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should load a page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Customer(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.customers[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should re-initialize the page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Customer(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + comp.reset(); + + // THEN + expect(comp.page).toEqual(0); + expect(service.query).toHaveBeenCalledTimes(2); + expect(comp.customers[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + it('should calculate the sort attribute for an id', () => { + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['id,asc']); + }); + + it('should calculate the sort attribute for a non-id attribute', () => { + // GIVEN + comp.predicate = 'name'; + + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['name,asc', 'id']); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/customer/customer.service.spec.ts b/src/test/javascript/spec/app/entities/customer/customer.service.spec.ts new file mode 100644 index 00000000..2b80a7d3 --- /dev/null +++ b/src/test/javascript/spec/app/entities/customer/customer.service.spec.ts @@ -0,0 +1,106 @@ +/* tslint:disable max-line-length */ +import { TestBed, getTestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { of } from 'rxjs'; +import { take, map } from 'rxjs/operators'; +import { CustomerService } from 'app/entities/customer/customer.service'; +import { ICustomer, Customer } from 'app/shared/model/customer.model'; + +describe('Service Tests', () => { + describe('Customer Service', () => { + let injector: TestBed; + let service: CustomerService; + let httpMock: HttpTestingController; + let elemDefault: ICustomer; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + }); + injector = getTestBed(); + service = injector.get(CustomerService); + httpMock = injector.get(HttpTestingController); + + elemDefault = new Customer(0, 0, 'AAAAAAA'); + }); + + describe('Service methods', async () => { + it('should find an element', async () => { + const returnedFromService = Object.assign({}, elemDefault); + service + .find(123) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: elemDefault })); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should create a Customer', async () => { + const returnedFromService = Object.assign( + { + id: 0 + }, + elemDefault + ); + const expected = Object.assign({}, returnedFromService); + service + .create(new Customer(null)) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'POST' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should update a Customer', async () => { + const returnedFromService = Object.assign( + { + number: 1, + prefix: 'BBBBBB' + }, + elemDefault + ); + + const expected = Object.assign({}, returnedFromService); + service + .update(expected) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'PUT' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should return a list of Customer', async () => { + const returnedFromService = Object.assign( + { + number: 1, + prefix: 'BBBBBB' + }, + elemDefault + ); + const expected = Object.assign({}, returnedFromService); + service + .query(expected) + .pipe( + take(1), + map(resp => resp.body) + ) + .subscribe(body => expect(body).toContainEqual(expected)); + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify([returnedFromService])); + httpMock.verify(); + }); + + it('should delete a Customer', async () => { + const rxPromise = service.delete(123).subscribe(resp => expect(resp.ok)); + + const req = httpMock.expectOne({ method: 'DELETE' }); + req.flush({ status: 200 }); + }); + }); + + afterEach(() => { + httpMock.verify(); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/membership/membership-delete-dialog.component.spec.ts b/src/test/javascript/spec/app/entities/membership/membership-delete-dialog.component.spec.ts new file mode 100644 index 00000000..9b396b77 --- /dev/null +++ b/src/test/javascript/spec/app/entities/membership/membership-delete-dialog.component.spec.ts @@ -0,0 +1,52 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Observable, of } from 'rxjs'; +import { JhiEventManager } from 'ng-jhipster'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { MembershipDeleteDialogComponent } from 'app/entities/membership/membership-delete-dialog.component'; +import { MembershipService } from 'app/entities/membership/membership.service'; + +describe('Component Tests', () => { + describe('Membership Management Delete Component', () => { + let comp: MembershipDeleteDialogComponent; + let fixture: ComponentFixture; + let service: MembershipService; + let mockEventManager: any; + let mockActiveModal: any; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [MembershipDeleteDialogComponent] + }) + .overrideTemplate(MembershipDeleteDialogComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(MembershipDeleteDialogComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(MembershipService); + mockEventManager = fixture.debugElement.injector.get(JhiEventManager); + mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); + }); + + describe('confirmDelete', () => { + it('Should call delete service on confirmDelete', inject( + [], + fakeAsync(() => { + // GIVEN + spyOn(service, 'delete').and.returnValue(of({})); + + // WHEN + comp.confirmDelete(123); + tick(); + + // THEN + expect(service.delete).toHaveBeenCalledWith(123); + expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); + expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); + }) + )); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/membership/membership-detail.component.spec.ts b/src/test/javascript/spec/app/entities/membership/membership-detail.component.spec.ts new file mode 100644 index 00000000..a66f96f5 --- /dev/null +++ b/src/test/javascript/spec/app/entities/membership/membership-detail.component.spec.ts @@ -0,0 +1,40 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { MembershipDetailComponent } from 'app/entities/membership/membership-detail.component'; +import { Membership } from 'app/shared/model/membership.model'; + +describe('Component Tests', () => { + describe('Membership Management Detail Component', () => { + let comp: MembershipDetailComponent; + let fixture: ComponentFixture; + const route = ({ data: of({ membership: new Membership(123) }) } as any) as ActivatedRoute; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [MembershipDetailComponent], + providers: [{ provide: ActivatedRoute, useValue: route }] + }) + .overrideTemplate(MembershipDetailComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(MembershipDetailComponent); + comp = fixture.componentInstance; + }); + + describe('OnInit', () => { + it('Should call load all on init', () => { + // GIVEN + + // WHEN + comp.ngOnInit(); + + // THEN + expect(comp.membership).toEqual(jasmine.objectContaining({ id: 123 })); + }); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/membership/membership-update.component.spec.ts b/src/test/javascript/spec/app/entities/membership/membership-update.component.spec.ts new file mode 100644 index 00000000..abd5a5a2 --- /dev/null +++ b/src/test/javascript/spec/app/entities/membership/membership-update.component.spec.ts @@ -0,0 +1,60 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { HttpResponse } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { MembershipUpdateComponent } from 'app/entities/membership/membership-update.component'; +import { MembershipService } from 'app/entities/membership/membership.service'; +import { Membership } from 'app/shared/model/membership.model'; + +describe('Component Tests', () => { + describe('Membership Management Update Component', () => { + let comp: MembershipUpdateComponent; + let fixture: ComponentFixture; + let service: MembershipService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [MembershipUpdateComponent] + }) + .overrideTemplate(MembershipUpdateComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(MembershipUpdateComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(MembershipService); + }); + + describe('save', () => { + it('Should call update service on save for existing entity', fakeAsync(() => { + // GIVEN + const entity = new Membership(123); + spyOn(service, 'update').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.membership = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.update).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + + it('Should call create service on save for new entity', fakeAsync(() => { + // GIVEN + const entity = new Membership(); + spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.membership = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.create).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/membership/membership.component.spec.ts b/src/test/javascript/spec/app/entities/membership/membership.component.spec.ts new file mode 100644 index 00000000..a43d6a1c --- /dev/null +++ b/src/test/javascript/spec/app/entities/membership/membership.component.spec.ts @@ -0,0 +1,128 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; +import { ActivatedRoute, Data } from '@angular/router'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { MembershipComponent } from 'app/entities/membership/membership.component'; +import { MembershipService } from 'app/entities/membership/membership.service'; +import { Membership } from 'app/shared/model/membership.model'; + +describe('Component Tests', () => { + describe('Membership Management Component', () => { + let comp: MembershipComponent; + let fixture: ComponentFixture; + let service: MembershipService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [MembershipComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: { + data: { + subscribe: (fn: (value: Data) => void) => + fn({ + pagingParams: { + predicate: 'id', + reverse: false, + page: 0 + } + }) + } + } + } + ] + }) + .overrideTemplate(MembershipComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(MembershipComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(MembershipService); + }); + + it('Should call load all on init', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Membership(123)], + headers + }) + ) + ); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.memberships[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should load a page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Membership(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.memberships[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should re-initialize the page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Membership(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + comp.reset(); + + // THEN + expect(comp.page).toEqual(0); + expect(service.query).toHaveBeenCalledTimes(2); + expect(comp.memberships[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + it('should calculate the sort attribute for an id', () => { + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['id,asc']); + }); + + it('should calculate the sort attribute for a non-id attribute', () => { + // GIVEN + comp.predicate = 'name'; + + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['name,asc', 'id']); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/membership/membership.service.spec.ts b/src/test/javascript/spec/app/entities/membership/membership.service.spec.ts new file mode 100644 index 00000000..d608d510 --- /dev/null +++ b/src/test/javascript/spec/app/entities/membership/membership.service.spec.ts @@ -0,0 +1,136 @@ +/* tslint:disable max-line-length */ +import { TestBed, getTestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { of } from 'rxjs'; +import { take, map } from 'rxjs/operators'; +import * as moment from 'moment'; +import { DATE_FORMAT } from 'app/shared/constants/input.constants'; +import { MembershipService } from 'app/entities/membership/membership.service'; +import { IMembership, Membership } from 'app/shared/model/membership.model'; + +describe('Service Tests', () => { + describe('Membership Service', () => { + let injector: TestBed; + let service: MembershipService; + let httpMock: HttpTestingController; + let elemDefault: IMembership; + let currentDate: moment.Moment; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + }); + injector = getTestBed(); + service = injector.get(MembershipService); + httpMock = injector.get(HttpTestingController); + currentDate = moment(); + + elemDefault = new Membership(0, currentDate, currentDate); + }); + + describe('Service methods', async () => { + it('should find an element', async () => { + const returnedFromService = Object.assign( + { + sinceDate: currentDate.format(DATE_FORMAT), + untilDate: currentDate.format(DATE_FORMAT) + }, + elemDefault + ); + service + .find(123) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: elemDefault })); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should create a Membership', async () => { + const returnedFromService = Object.assign( + { + id: 0, + sinceDate: currentDate.format(DATE_FORMAT), + untilDate: currentDate.format(DATE_FORMAT) + }, + elemDefault + ); + const expected = Object.assign( + { + sinceDate: currentDate, + untilDate: currentDate + }, + returnedFromService + ); + service + .create(new Membership(null)) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'POST' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should update a Membership', async () => { + const returnedFromService = Object.assign( + { + sinceDate: currentDate.format(DATE_FORMAT), + untilDate: currentDate.format(DATE_FORMAT) + }, + elemDefault + ); + + const expected = Object.assign( + { + sinceDate: currentDate, + untilDate: currentDate + }, + returnedFromService + ); + service + .update(expected) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'PUT' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should return a list of Membership', async () => { + const returnedFromService = Object.assign( + { + sinceDate: currentDate.format(DATE_FORMAT), + untilDate: currentDate.format(DATE_FORMAT) + }, + elemDefault + ); + const expected = Object.assign( + { + sinceDate: currentDate, + untilDate: currentDate + }, + returnedFromService + ); + service + .query(expected) + .pipe( + take(1), + map(resp => resp.body) + ) + .subscribe(body => expect(body).toContainEqual(expected)); + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify([returnedFromService])); + httpMock.verify(); + }); + + it('should delete a Membership', async () => { + const rxPromise = service.delete(123).subscribe(resp => expect(resp.ok)); + + const req = httpMock.expectOne({ method: 'DELETE' }); + req.flush({ status: 200 }); + }); + }); + + afterEach(() => { + httpMock.verify(); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/share/share-delete-dialog.component.spec.ts b/src/test/javascript/spec/app/entities/share/share-delete-dialog.component.spec.ts new file mode 100644 index 00000000..7e1c8acb --- /dev/null +++ b/src/test/javascript/spec/app/entities/share/share-delete-dialog.component.spec.ts @@ -0,0 +1,52 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Observable, of } from 'rxjs'; +import { JhiEventManager } from 'ng-jhipster'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { ShareDeleteDialogComponent } from 'app/entities/share/share-delete-dialog.component'; +import { ShareService } from 'app/entities/share/share.service'; + +describe('Component Tests', () => { + describe('Share Management Delete Component', () => { + let comp: ShareDeleteDialogComponent; + let fixture: ComponentFixture; + let service: ShareService; + let mockEventManager: any; + let mockActiveModal: any; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [ShareDeleteDialogComponent] + }) + .overrideTemplate(ShareDeleteDialogComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(ShareDeleteDialogComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(ShareService); + mockEventManager = fixture.debugElement.injector.get(JhiEventManager); + mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); + }); + + describe('confirmDelete', () => { + it('Should call delete service on confirmDelete', inject( + [], + fakeAsync(() => { + // GIVEN + spyOn(service, 'delete').and.returnValue(of({})); + + // WHEN + comp.confirmDelete(123); + tick(); + + // THEN + expect(service.delete).toHaveBeenCalledWith(123); + expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); + expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); + }) + )); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/share/share-detail.component.spec.ts b/src/test/javascript/spec/app/entities/share/share-detail.component.spec.ts new file mode 100644 index 00000000..69de2445 --- /dev/null +++ b/src/test/javascript/spec/app/entities/share/share-detail.component.spec.ts @@ -0,0 +1,40 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { ShareDetailComponent } from 'app/entities/share/share-detail.component'; +import { Share } from 'app/shared/model/share.model'; + +describe('Component Tests', () => { + describe('Share Management Detail Component', () => { + let comp: ShareDetailComponent; + let fixture: ComponentFixture; + const route = ({ data: of({ share: new Share(123) }) } as any) as ActivatedRoute; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [ShareDetailComponent], + providers: [{ provide: ActivatedRoute, useValue: route }] + }) + .overrideTemplate(ShareDetailComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(ShareDetailComponent); + comp = fixture.componentInstance; + }); + + describe('OnInit', () => { + it('Should call load all on init', () => { + // GIVEN + + // WHEN + comp.ngOnInit(); + + // THEN + expect(comp.share).toEqual(jasmine.objectContaining({ id: 123 })); + }); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/share/share-update.component.spec.ts b/src/test/javascript/spec/app/entities/share/share-update.component.spec.ts new file mode 100644 index 00000000..279be464 --- /dev/null +++ b/src/test/javascript/spec/app/entities/share/share-update.component.spec.ts @@ -0,0 +1,60 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { HttpResponse } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { ShareUpdateComponent } from 'app/entities/share/share-update.component'; +import { ShareService } from 'app/entities/share/share.service'; +import { Share } from 'app/shared/model/share.model'; + +describe('Component Tests', () => { + describe('Share Management Update Component', () => { + let comp: ShareUpdateComponent; + let fixture: ComponentFixture; + let service: ShareService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [ShareUpdateComponent] + }) + .overrideTemplate(ShareUpdateComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(ShareUpdateComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(ShareService); + }); + + describe('save', () => { + it('Should call update service on save for existing entity', fakeAsync(() => { + // GIVEN + const entity = new Share(123); + spyOn(service, 'update').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.share = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.update).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + + it('Should call create service on save for new entity', fakeAsync(() => { + // GIVEN + const entity = new Share(); + spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.share = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.create).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/share/share.component.spec.ts b/src/test/javascript/spec/app/entities/share/share.component.spec.ts new file mode 100644 index 00000000..ab0e60bb --- /dev/null +++ b/src/test/javascript/spec/app/entities/share/share.component.spec.ts @@ -0,0 +1,128 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; +import { ActivatedRoute, Data } from '@angular/router'; + +import { HsadminNgTestModule } from '../../../test.module'; +import { ShareComponent } from 'app/entities/share/share.component'; +import { ShareService } from 'app/entities/share/share.service'; +import { Share } from 'app/shared/model/share.model'; + +describe('Component Tests', () => { + describe('Share Management Component', () => { + let comp: ShareComponent; + let fixture: ComponentFixture; + let service: ShareService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HsadminNgTestModule], + declarations: [ShareComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: { + data: { + subscribe: (fn: (value: Data) => void) => + fn({ + pagingParams: { + predicate: 'id', + reverse: false, + page: 0 + } + }) + } + } + } + ] + }) + .overrideTemplate(ShareComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(ShareComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(ShareService); + }); + + it('Should call load all on init', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Share(123)], + headers + }) + ) + ); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.shares[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should load a page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Share(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.shares[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + + it('should re-initialize the page', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Share(123)], + headers + }) + ) + ); + + // WHEN + comp.loadPage(1); + comp.reset(); + + // THEN + expect(comp.page).toEqual(0); + expect(service.query).toHaveBeenCalledTimes(2); + expect(comp.shares[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + it('should calculate the sort attribute for an id', () => { + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['id,asc']); + }); + + it('should calculate the sort attribute for a non-id attribute', () => { + // GIVEN + comp.predicate = 'name'; + + // WHEN + const result = comp.sort(); + + // THEN + expect(result).toEqual(['name,asc', 'id']); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/share/share.service.spec.ts b/src/test/javascript/spec/app/entities/share/share.service.spec.ts new file mode 100644 index 00000000..b3288c82 --- /dev/null +++ b/src/test/javascript/spec/app/entities/share/share.service.spec.ts @@ -0,0 +1,135 @@ +/* tslint:disable max-line-length */ +import { TestBed, getTestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { of } from 'rxjs'; +import { take, map } from 'rxjs/operators'; +import * as moment from 'moment'; +import { DATE_FORMAT } from 'app/shared/constants/input.constants'; +import { ShareService } from 'app/entities/share/share.service'; +import { IShare, Share, ShareAction } from 'app/shared/model/share.model'; + +describe('Service Tests', () => { + describe('Share Service', () => { + let injector: TestBed; + let service: ShareService; + let httpMock: HttpTestingController; + let elemDefault: IShare; + let currentDate: moment.Moment; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + }); + injector = getTestBed(); + service = injector.get(ShareService); + httpMock = injector.get(HttpTestingController); + currentDate = moment(); + + elemDefault = new Share(0, currentDate, ShareAction.SUBSCRIPTION, 0, 'AAAAAAA'); + }); + + describe('Service methods', async () => { + it('should find an element', async () => { + const returnedFromService = Object.assign( + { + date: currentDate.format(DATE_FORMAT) + }, + elemDefault + ); + service + .find(123) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: elemDefault })); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should create a Share', async () => { + const returnedFromService = Object.assign( + { + id: 0, + date: currentDate.format(DATE_FORMAT) + }, + elemDefault + ); + const expected = Object.assign( + { + date: currentDate + }, + returnedFromService + ); + service + .create(new Share(null)) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'POST' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should update a Share', async () => { + const returnedFromService = Object.assign( + { + date: currentDate.format(DATE_FORMAT), + action: 'BBBBBB', + quantity: 1, + comment: 'BBBBBB' + }, + elemDefault + ); + + const expected = Object.assign( + { + date: currentDate + }, + returnedFromService + ); + service + .update(expected) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'PUT' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should return a list of Share', async () => { + const returnedFromService = Object.assign( + { + date: currentDate.format(DATE_FORMAT), + action: 'BBBBBB', + quantity: 1, + comment: 'BBBBBB' + }, + elemDefault + ); + const expected = Object.assign( + { + date: currentDate + }, + returnedFromService + ); + service + .query(expected) + .pipe( + take(1), + map(resp => resp.body) + ) + .subscribe(body => expect(body).toContainEqual(expected)); + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify([returnedFromService])); + httpMock.verify(); + }); + + it('should delete a Share', async () => { + const rxPromise = service.delete(123).subscribe(resp => expect(resp.ok)); + + const req = httpMock.expectOne({ method: 'DELETE' }); + req.flush({ status: 200 }); + }); + }); + + afterEach(() => { + httpMock.verify(); + }); + }); +});