Skip to content

Commit

Permalink
Merge pull request Devskiller#67 from andidev/refactor-credit-card-pr…
Browse files Browse the repository at this point in the history
…ovider

Refactor credit card producer into a credit card provider
  • Loading branch information
OlgaMaciaszek committed Jul 31, 2016
2 parents 35d1237 + 84e2385 commit 149150e
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 31 deletions.
5 changes: 3 additions & 2 deletions src/main/java/io/codearte/jfairy/Fairy.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import io.codearte.jfairy.producer.company.CompanyFactory;
import io.codearte.jfairy.producer.net.NetworkProducer;
import io.codearte.jfairy.producer.payment.CreditCard;
import io.codearte.jfairy.producer.payment.CreditCardProvider;
import io.codearte.jfairy.producer.person.Person;
import io.codearte.jfairy.producer.person.PersonFactory;
import io.codearte.jfairy.producer.person.PersonProperties;
Expand All @@ -27,12 +28,12 @@ public final class Fairy {
private final NetworkProducer networkProducer;
private final BaseProducer baseProducer;
private final DateProducer dateProducer;
private final Provider<CreditCard> creditCardProvider;
private final CreditCardProvider creditCardProvider;
private final CompanyFactory companyFactory;

@Inject
Fairy(TextProducer textProducer, PersonFactory personFactory, NetworkProducer networkProducer,
BaseProducer baseProducer, DateProducer dateProducer, Provider<CreditCard> creditCardProvider, CompanyFactory companyFactory) {
BaseProducer baseProducer, DateProducer dateProducer, CreditCardProvider creditCardProvider, CompanyFactory companyFactory) {
this.textProducer = textProducer;
this.personFactory = personFactory;
this.networkProducer = networkProducer;
Expand Down
27 changes: 5 additions & 22 deletions src/main/java/io/codearte/jfairy/producer/payment/CreditCard.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,19 @@
package io.codearte.jfairy.producer.payment;

import io.codearte.jfairy.data.DataMaster;
import io.codearte.jfairy.producer.DateProducer;
import org.joda.time.DateTime;
import org.joda.time.Period;

import javax.inject.Inject;

/**
* @author jkubrynski@gmail.com
* @since 2013-11-17
*/
public class CreditCard {

private static final Period DEFAULT_VALIDITY = Period.months(36);
private static final String DATA_KEY = "cardVendors";

private final DataMaster dataMaster;
private final DateProducer dateProducer;
private String cardVendor;
private DateTime expiryDate;

@Inject
public CreditCard(DataMaster dataMaster, DateProducer dateProducer) {
this.dataMaster = dataMaster;
this.dateProducer = dateProducer;
generate();
}
private final String cardVendor;
private final DateTime expiryDate;

public final void generate() {
cardVendor = dataMaster.getRandomValue(DATA_KEY);
expiryDate = dateProducer.randomDateBetweenNowAndFuturePeriod(DEFAULT_VALIDITY);
public CreditCard(String cardVendor, DateTime expiryDate) {
this.cardVendor = cardVendor;
this.expiryDate = expiryDate;
}

public String vendor() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.codearte.jfairy.producer.payment;

import com.google.inject.Provider;
import io.codearte.jfairy.data.DataMaster;
import io.codearte.jfairy.producer.DateProducer;
import org.joda.time.DateTime;
import org.joda.time.Period;

import javax.inject.Inject;

public class CreditCardProvider implements Provider<CreditCard> {

private static final Period DEFAULT_VALIDITY = Period.months(36);
private static final String DATA_KEY = "cardVendors";

private final DataMaster dataMaster;
private final DateProducer dateProducer;

@Inject
public CreditCardProvider(DataMaster dataMaster, DateProducer dateProducer) {
this.dataMaster = dataMaster;
this.dateProducer = dateProducer;
}

@Override
public CreditCard get() {
String cardVendor = dataMaster.getRandomValue(DATA_KEY);
DateTime expiryDate = dateProducer.randomDateBetweenNowAndFuturePeriod(DEFAULT_VALIDITY);
return new CreditCard(cardVendor, expiryDate);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,42 +11,44 @@ import spock.lang.Specification
* @author jkubrynski@gmail.com
* @since 2013-11-17
*/
class CreditCardProducerSpec extends Specification {
class CreditCardProviderSpec extends Specification {

public static final DateTime EXPIRY_DATE = new DateTime("2009-02-11T23:59:59.999")

private DataMaster dataMaster
private DateProducer dateProducer
private CreditCardProvider creditCardProvider;

def setup() {
dataMaster = new MapBasedDataMaster(new BaseProducer(new Random()))
dateProducer = Mock(DateProducer)
dataMaster.readResources("jfairy.yml")
creditCardProvider = new CreditCardProvider(dataMaster, dateProducer)
}

def "should return credit card provider"() {
when:
CreditCard cardProducer = new CreditCard(dataMaster, dateProducer)
CreditCard creditCard = creditCardProvider.get()
then:
cardProducer.vendor()
creditCard.vendor()
}

def "should return card expiry date"() {
given:
dateProducer.randomDateBetweenNowAndFuturePeriod(_) >> EXPIRY_DATE
when:
CreditCard cardProducer = new CreditCard(dataMaster, dateProducer)
CreditCard creditCard = creditCardProvider.get()
then:
cardProducer.expiryDate() == EXPIRY_DATE
creditCard.expiryDate() == EXPIRY_DATE
}

def "should return card expiry date string"() {
given:
dateProducer.randomDateBetweenNowAndFuturePeriod(_) >> EXPIRY_DATE
when:
CreditCard cardProducer = new CreditCard(dataMaster, dateProducer)
CreditCard creditCard = creditCardProvider.get()
then:
cardProducer.expiryDateAsString() == "02/09"
creditCard.expiryDateAsString() == "02/09"
}


Expand Down

0 comments on commit 149150e

Please sign in to comment.