six2six / fixture-factory

Generator fake objects from a template
Apache License 2.0
445 stars 88 forks source link

Problem with function instant("now) #102

Open gserracalahorra opened 6 years ago

gserracalahorra commented 6 years ago

Using fixture-factory-3.1.0, when fixture-factory trying to build this object

`public class ContactTemplate implements TemplateLoader { @Override public void load() { Fixture.of(Contact.class).addTemplate("valid", new Rule() { { add("id", random(Long.class, range(1L, 10000L))); add("codeUserClient", regex("[A-Za-z]{5,10}")); add("locale", new Locale("es","ES")); add("startDate", instant("now")); add("endDate", instant("tomorrow")); } });

    Fixture.of(Contact.class).addTemplate("repository").inherits("valid", new Rule()
    {
        {
            add("id",null);
        }
    });
}

} ` For this bean:

**` @Entity @Table(name = "AX_CONTACT") public class Contact implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GenericGenerator(name = "seq", strategy = "enhanced-sequence", parameters = {
        @org.hibernate.annotations.Parameter(name = "optimizer", value = "pooled"),
        @org.hibernate.annotations.Parameter(name = "sequence_name", value = "SEQ_AX_CONTACT"),
        @org.hibernate.annotations.Parameter(name = "initial_value", value = "1"),
        @org.hibernate.annotations.Parameter(name = "increment_size", value = "1")
})
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq")
@Column(name = "ID", length = 10, nullable = false)
private Long id;

@Column(name = "CODE_USER_CLIENT", nullable = false, length = 250)
private String codeUserClient;

@Column(name = "LANG", nullable = false, length = 5)
@Type(type = "locale")
private Locale locale;

@Column(name = "START_DATE",
        nullable = false)
private LocalDate startDate;

@Column(name = "END_DATE")
private LocalDate endDate;

public Contact()
{
    // empty constructor
}

public Long getId()
{
    return id;
}

public void setId(Long id)
{
    this.id = id;
}

public String getCodeUserClient()
{
    return codeUserClient;
}

public void setCodeUserClient(String codeUserClient)
{
    this.codeUserClient = codeUserClient;
}

public Locale getLocale()
{
    return locale;
}

public void setLocale(Locale locale)
{
    this.locale = locale;
}

public LocalDate getStartDate()
{
    return startDate;
}

public void setStartDate(LocalDate startDate)
{
    this.startDate = startDate;
}

public LocalDate getEndDate()
{
    return endDate;
}

public void setEndDate(LocalDate endDate)
{
    this.endDate = endDate;
}

@Override
public String toString()
{
    return "Contact{" + "id=" + id + ", codeUserClient='" + codeUserClient + '\'' + ", locale=" + locale + ", startDate=" + startDate
            + ", endDate=" + endDate + '}';
}

} `

Using this way:

Contact contact = Fixture.from(Contact.class).uses(getHibernateProcessor()).gimme("repository");

it fires the next exception.

java.lang.IllegalArgumentException: Incorrect type for transformer: java.time.LocalDate at br.com.six2six.fixturefactory.transformer.CalendarTransformer.transform(CalendarTransformer.java:38) at br.com.six2six.fixturefactory.transformer.TransformerChain.transform(TransformerChain.java:14) at br.com.six2six.fixturefactory.transformer.TransformerChain.transform(TransformerChain.java:18) at br.com.six2six.fixturefactory.ObjectFactory.processPropertyValue(ObjectFactory.java:240) at br.com.six2six.fixturefactory.ObjectFactory.createObject(ObjectFactory.java:121) at br.com.six2six.fixturefactory.ObjectFactory.gimme(ObjectFactory.java:62) at com.axpo.axiom.dbaccess.test.ContactRepositoryTest.testSaveAndFindOne(ContactRepositoryTest.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

¿What is the problem?

nykolaslima commented 6 years ago

There is no support for LocalDate. instant function returns Date objects. You could create an custom AtomicFunction and implement it by yourself.

e.g.

  public static AtomicFunction localDate() {
    return new AtomicFunction() {
      @Override
      public <T> T generateValue() {
        return (T) LocalDate.now();
      }
    };
  }
IshankGulati commented 5 years ago

@nykolaslima I see a PR was merged to support java 8 datetime. Why isn't this released?