Skip to content

Commit

Permalink
Added support for generating ISSNS codes.
Browse files Browse the repository at this point in the history
  • Loading branch information
nomemory authored and Ciobanu, Andrei-Nicolin (UK - EDC) committed Apr 2, 2017
1 parent 5f40af6 commit 877c955
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,17 @@

import net.andreinc.mockneat.MockNeat;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Stream;

import static net.andreinc.mockneat.types.enums.CreditCardType.AMERICAN_EXPRESS;
import static net.andreinc.mockneat.types.enums.CreditCardType.MASTERCARD;
import static net.andreinc.mockneat.types.enums.CreditCardType.VISA_16;
import static java.nio.file.StandardOpenOption.CREATE;
import static java.nio.file.StandardOpenOption.WRITE;
import static net.andreinc.mockneat.types.enums.CreditCardType.*;

/**
* Created by andreinicolinciobanu on 03/03/2017.
Expand All @@ -18,6 +22,16 @@ public class GenerateCreditCards {

public static void main(String[] args) {
MockNeat m = MockNeat.threadLocal();
final Path path = Paths.get("cc.txt");

// Write in a file 1000 credit cards AMEX and Mastercard:
m.creditCards()
.types(MASTERCARD, AMERICAN_EXPRESS)
.list(1000)
.consume(list -> {
try { Files.write(path, list, CREATE, WRITE); }
catch (IOException e) { e.printStackTrace(); }
});

// Generates a single valid credit card number (AMEX)
String amex = m.creditCards()
Expand Down Expand Up @@ -59,5 +73,7 @@ public static void main(String[] args) {
.val();

String ccName = m.creditCards().names().val();


}
}
5 changes: 5 additions & 0 deletions src/main/java/net/andreinc/mockneat/MockNeat.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import net.andreinc.mockneat.unit.financial.Money;
import net.andreinc.mockneat.unit.hashes.Hashes;
import net.andreinc.mockneat.unit.id.UUIDs;
import net.andreinc.mockneat.unit.misc.ISSNS;
import net.andreinc.mockneat.unit.misc.SSCs;
import net.andreinc.mockneat.unit.networking.*;
import net.andreinc.mockneat.unit.objects.Constructor;
Expand Down Expand Up @@ -78,6 +79,7 @@ public class MockNeat {
private final Genders rGenders;
private final Hashes rHashes;
private final Ints rInts;
private final ISSNS rISSNS;
private final IPv4s rIPv4s;
private final IPv6s rIPv6s;
private final LocalDates rLocalDates;
Expand Down Expand Up @@ -114,6 +116,7 @@ public MockNeat(RandomType randomTypeType) {
this.rInts = new Ints(this);
this.rIPv4s = new IPv4s(this);
this.rIPv6s = new IPv6s(this);
this.rISSNS = new ISSNS(this);
this.rLocalDates = new LocalDates(this);
this.rLongs = new Longs(this);
this.rMacs = new Macs(this);
Expand Down Expand Up @@ -196,6 +199,8 @@ public <T, FT> Factory<T, FT> factory(Class<T> targetCls, Class<FT> factoryCls)

public IPv6s iPv6s() { return this.rIPv6s; }

public ISSNS issns() { return this.rISSNS; }

public LocalDates localDates() { return this.rLocalDates; }

public Longs longs() { return this.rLongs; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ default <R> R val(Function<T, R> function) {
return function.apply(supplier().get());
}

//TODO document
default void consume(Consumer<T> consumer) {
notNull(consumer, INPUT_PARAMETER_NOT_NULL, "consumer");
consumer.accept(val());
Expand Down
38 changes: 38 additions & 0 deletions src/main/java/net/andreinc/mockneat/unit/misc/ISSNS.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package net.andreinc.mockneat.unit.misc;

import net.andreinc.mockneat.MockNeat;
import net.andreinc.mockneat.interfaces.MockUnitString;

import java.util.function.Supplier;

import static org.apache.commons.lang3.StringUtils.join;

/**
* Created by andreinicolinciobanu on 26/03/17.
*/
public class ISSNS implements MockUnitString {

private static final String ISSN_PREFIX = "ISSN";

private MockNeat mock;

public ISSNS(MockNeat mockNeat) {
this.mock = mockNeat;
}

@Override
public Supplier<String> supplier() {
return () -> {
Integer[] array = mock.ints().range(0, 10).array(7).val();
int sum = 0;
for(int i = 0, j = 8; i < array.length; i++, j--) {
sum += j * array[i];
}
int remainder = sum % 11;
if (remainder != 0) { remainder = 11 - remainder; }
return ISSN_PREFIX + " " + join(array, "", 0, 4)
+ "-" + join(array, "", 4, 7)
+ ((remainder == 10) ? "X" : remainder + "");
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@

public class NamedFormatUtils {

protected enum State { PARAM, PARAM_START, PARAM_END, FREE_TEXT }

// fmt = "${param1}${param2}${param3}"
public static String format(String fmt, Map<String, String> args) {
int i = 0;
Expand Down Expand Up @@ -58,6 +56,8 @@ public static String format(String fmt, Map<String, String> args) {
return result.toString();
}


protected enum State { PARAM, PARAM_START, PARAM_END, FREE_TEXT }
private static void appendParamValue(Map<String, String> args, StringBuilder param, StringBuilder result) {
String paramStr = param.toString();
validateParamLength(paramStr);
Expand Down
1 change: 1 addition & 0 deletions src/test/java/net/andreinc/mockneat/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class Constants {
public static final int FMT_CYCLES = 1000;
public static final int GENDERS_CYCLES = 1000;
public static final int IBANS_CYCLES = 1000;
public static final int ISSNS_CYCLES = 1000;
public static final int INTS_CYCLES = 1000;
public static final int IPV4S_CYCLES = 1000;
public static final int IPV6S_CYCLES = 1000;
Expand Down
28 changes: 28 additions & 0 deletions src/test/java/net/andreinc/mockneat/unit/misc/ISSNSTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package net.andreinc.mockneat.unit.misc;

import org.apache.commons.validator.routines.ISSNValidator;
import org.junit.Test;

import static net.andreinc.mockneat.Constants.*;
import static net.andreinc.mockneat.utils.LoopsUtils.loop;
import static org.junit.Assert.assertTrue;

/**
* Created by andreinicolinciobanu on 26/03/17.
*/
public class ISSNSTest {

private ISSNValidator validator = ISSNValidator.getInstance();

@Test
public void test() throws Exception {
loop(
true,
ISSNS_CYCLES,
MOCKS,
m -> m.issns().val(),
issn -> assertTrue(validator.validate(issn)!=null)
);
System.out.println(M.issns().val());
}
}

0 comments on commit 877c955

Please sign in to comment.