// Path: integration-test/test-model/src/main/java/eu/drus/jpa/unit/test/model/Depositor.java
// @Entity
// @Table(name = "DEPOSITOR")
// public class Depositor {
// 
//     // persistence specific attributes
// 
//     @Id
//     @GeneratedValue(strategy = GenerationType.TABLE)
//     private Long id;
// 
//     @Version
//     @Column(name = "VERSION")
//     private Long version;
// 
//     // entity attributes
// 
//     @Column(name = "NAME")
//     @Basic(optional = false)
//     private String name;
// 
//     @Column(name = "SURNAME")
//     @Basic(optional = false)
//     private String surname;
// 
//     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
//     @JoinColumn(name = "DEPOSITOR_ID")
//     private Set<Address> addresses = new HashSet<>();
// 
//     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
//     @JoinColumn(name = "DEPOSITOR_ID")
//     private Set<ContactDetail> contactDetails = new HashSet<>();
// 
//     @OneToMany(mappedBy = "depositor", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
//     private Set<Account> accounts = new HashSet<>();
// 
//     protected Depositor() {
//         // for JPA
//     }
// 
//     public Depositor(final String name, final String surname) {
//         this.name = name;
//         this.surname = surname;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(final String name) {
//         this.name = name;
//     }
// 
//     public String getSurname() {
//         return surname;
//     }
// 
//     public void setSurname(final String surname) {
//         this.surname = surname;
//     }
// 
//     public Set<Account> getAccounts() {
//         return Collections.unmodifiableSet(accounts);
//     }
// 
//     protected boolean addAccount(final Account account) {
//         return accounts.add(account);
//     }
// 
//     public boolean removeAccount(final Account account) {
//         if (accounts.remove(account)) {
//             account.setDepositor(null);
//             return true;
//         }
//         return false;
//     }
// 
//     public boolean addAddress(final Address address) {
//         return addresses.add(address);
//     }
// 
//     public boolean removeAddress(final Address address) {
//         return addresses.remove(address);
//     }
// 
//     public Set<Address> getAddresses() {
//         return Collections.unmodifiableSet(addresses);
//     }
// 
//     public Set<ContactDetail> getContactDetails() {
//         return Collections.unmodifiableSet(contactDetails);
//     }
// 
//     public boolean addContactDetail(final ContactDetail contactDetail) {
//         return contactDetails.add(contactDetail);
//     }
// 
//     public boolean removeContactDetail(final ContactDetail contactDetail) {
//         return contactDetails.remove(contactDetail);
//     }
// 
//     @Override
//     public String toString() {
//         final ToStringBuilder builder = new ToStringBuilder(this);
//         builder.append("id", id);
//         builder.append("version", version);
//         builder.append("name", name);
//         builder.append("surname", surname);
//         return builder.build();
//     }
// }
// 
// Path: integration-test/test-model/src/main/java/eu/drus/jpa/unit/test/model/InstantAccessAccount.java
// @Entity
// @DiscriminatorValue(value = "INSTANT_ACCESS_ACCOUNT")
// public class InstantAccessAccount extends Account {
// 
//     protected InstantAccessAccount() {
//         super();
//         // for JPA
//     }
// 
//     public InstantAccessAccount(final Depositor depositor) {
//         super(depositor);
//     }
// 
//     @Override
//     public float withdraw(final float amount) throws OperationNotSupportedException {
//         throw new OperationNotSupportedException("Instant access account does not support money withdraw");
//     }
// 
//     @Override
//     public float transfer(final float amount, final Account toAccount) {
//         final double balance = getBalance();
//         final double balanceAfterTransfer = balance - amount;
//         if (balanceAfterTransfer < 0.0f) {
//             return 0;
//         }
// 
//         final Date date = new Date(System.currentTimeMillis());
// 
//         addEntry(new AccountEntry(date, "ACC", "money transfer", amount, AccountEntryType.CREDIT));
//         toAccount.addEntry(new AccountEntry(date, "ACC", "money transfer", amount, AccountEntryType.DEBIT));
//         return amount;
//     }
// 
//     @Override
//     public float deposit(final float amount) throws OperationNotSupportedException {
//         throw new OperationNotSupportedException("Instant access account does not support money deposit");
//     }
// 
// }


import javax.inject.Inject;
import eu.drus.jpa.unit.api.Cleanup;
import eu.drus.jpa.unit.api.CleanupPhase;
import eu.drus.jpa.unit.api.ExpectedDataSets;
import eu.drus.jpa.unit.test.model.Depositor;
import eu.drus.jpa.unit.test.model.DepositorRepository;
import eu.drus.jpa.unit.test.model.InstantAccessAccount;
package eu.drus.jpa.unit.test;



public abstract class AbstractCdiEnabledNewDepositorFixture extends AbstractConcordionFixture {

    @Inject
    private DepositorRepository repository;

// Path: integration-test/test-model/src/main/java/eu/drus/jpa/unit/test/model/Depositor.java
// @Entity
// @Table(name = "DEPOSITOR")
// public class Depositor {
// 
//     // persistence specific attributes
// 
//     @Id
//     @GeneratedValue(strategy = GenerationType.TABLE)
//     private Long id;
// 
//     @Version
//     @Column(name = "VERSION")
//     private Long version;
// 
//     // entity attributes
// 
//     @Column(name = "NAME")
//     @Basic(optional = false)
//     private String name;
// 
//     @Column(name = "SURNAME")
//     @Basic(optional = false)
//     private String surname;
// 
//     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
//     @JoinColumn(name = "DEPOSITOR_ID")
//     private Set<Address> addresses = new HashSet<>();
// 
//     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
//     @JoinColumn(name = "DEPOSITOR_ID")
//     private Set<ContactDetail> contactDetails = new HashSet<>();
// 
//     @OneToMany(mappedBy = "depositor", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
//     private Set<Account> accounts = new HashSet<>();
// 
//     protected Depositor() {
//         // for JPA
//     }
// 
//     public Depositor(final String name, final String surname) {
//         this.name = name;
//         this.surname = surname;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(final String name) {
//         this.name = name;
//     }
// 
//     public String getSurname() {
//         return surname;
//     }
// 
//     public void setSurname(final String surname) {
//         this.surname = surname;
//     }
// 
//     public Set<Account> getAccounts() {
//         return Collections.unmodifiableSet(accounts);
//     }
// 
//     protected boolean addAccount(final Account account) {
//         return accounts.add(account);
//     }
// 
//     public boolean removeAccount(final Account account) {
//         if (accounts.remove(account)) {
//             account.setDepositor(null);
//             return true;
//         }
//         return false;
//     }
// 
//     public boolean addAddress(final Address address) {
//         return addresses.add(address);
//     }
// 
//     public boolean removeAddress(final Address address) {
//         return addresses.remove(address);
//     }
// 
//     public Set<Address> getAddresses() {
//         return Collections.unmodifiableSet(addresses);
//     }
// 
//     public Set<ContactDetail> getContactDetails() {
//         return Collections.unmodifiableSet(contactDetails);
//     }
// 
//     public boolean addContactDetail(final ContactDetail contactDetail) {
//         return contactDetails.add(contactDetail);
//     }
// 
//     public boolean removeContactDetail(final ContactDetail contactDetail) {
//         return contactDetails.remove(contactDetail);
//     }
// 
//     @Override
//     public String toString() {
//         final ToStringBuilder builder = new ToStringBuilder(this);
//         builder.append("id", id);
//         builder.append("version", version);
//         builder.append("name", name);
//         builder.append("surname", surname);
//         return builder.build();
//     }
// }
// 
// Path: integration-test/test-model/src/main/java/eu/drus/jpa/unit/test/model/InstantAccessAccount.java
// @Entity
// @DiscriminatorValue(value = "INSTANT_ACCESS_ACCOUNT")
// public class InstantAccessAccount extends Account {
// 
//     protected InstantAccessAccount() {
//         super();
//         // for JPA
//     }
// 
//     public InstantAccessAccount(final Depositor depositor) {
//         super(depositor);
//     }
// 
//     @Override
//     public float withdraw(final float amount) throws OperationNotSupportedException {
//         throw new OperationNotSupportedException("Instant access account does not support money withdraw");
//     }
// 
//     @Override
//     public float transfer(final float amount, final Account toAccount) {
//         final double balance = getBalance();
//         final double balanceAfterTransfer = balance - amount;
//         if (balanceAfterTransfer < 0.0f) {
//             return 0;
//         }
// 
//         final Date date = new Date(System.currentTimeMillis());
// 
//         addEntry(new AccountEntry(date, "ACC", "money transfer", amount, AccountEntryType.CREDIT));
//         toAccount.addEntry(new AccountEntry(date, "ACC", "money transfer", amount, AccountEntryType.DEBIT));
//         return amount;
//     }
// 
//     @Override
//     public float deposit(final float amount) throws OperationNotSupportedException {
//         throw new OperationNotSupportedException("Instant access account does not support money deposit");
//     }
// 
// }


// Path: integration-test/base/src/main/java/eu/drus/jpa/unit/test/AbstractCdiEnabledNewDepositorFixture.java
import javax.inject.Inject;
import eu.drus.jpa.unit.api.Cleanup;
import eu.drus.jpa.unit.api.CleanupPhase;
import eu.drus.jpa.unit.api.ExpectedDataSets;
import eu.drus.jpa.unit.test.model.Depositor;
import eu.drus.jpa.unit.test.model.DepositorRepository;
import eu.drus.jpa.unit.test.model.InstantAccessAccount;

package eu.drus.jpa.unit.test;



public abstract class AbstractCdiEnabledNewDepositorFixture extends AbstractConcordionFixture {

    @Inject
    private DepositorRepository repository;

    public Depositor createNewCustomer(final String customerName) {