package org.jooby.internal; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import java.io.File; import java.util.Arrays; import java.util.List; import java.util.Optional; import org.jooby.MediaType; import org.jooby.Mutant; import org.jooby.internal.parser.ParserExecutor; import org.jooby.spi.NativeUpload; import org.jooby.test.MockUnit; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import com.google.inject.Injector; @RunWith(PowerMockRunner.class) @PrepareForTest({UploadImpl.class, MutantImpl.class }) public class UploadImplTest { @Test public void close() throws Exception { new MockUnit(Injector.class, NativeUpload.class) .expect(unit -> { unit.get(NativeUpload.class).close(); }) .run(unit -> { new UploadImpl(unit.get(Injector.class), unit.get(NativeUpload.class)).close(); }); } @Test public void name() throws Exception { new MockUnit(Injector.class, NativeUpload.class) .expect(unit -> { expect(unit.get(NativeUpload.class).name()).andReturn("x"); }) .run(unit -> { assertEquals("x", new UploadImpl(unit.get(Injector.class), unit.get(NativeUpload.class)).name()); }); } @Test public void describe() throws Exception { new MockUnit(Injector.class, NativeUpload.class) .expect(unit -> { expect(unit.get(NativeUpload.class).name()).andReturn("x"); }) .run(unit -> { assertEquals("x", new UploadImpl(unit.get(Injector.class), unit.get(NativeUpload.class)).toString()); }); } @Test public void file() throws Exception { File f = new File("x"); new MockUnit(Injector.class, NativeUpload.class) .expect(unit -> { expect(unit.get(NativeUpload.class).file()).andReturn(f); }) .run(unit -> { assertEquals(f, new UploadImpl(unit.get(Injector.class), unit.get(NativeUpload.class)).file()); }); } @Test public void type() throws Exception { new MockUnit(Injector.class, NativeUpload.class, ParserExecutor.class) .expect(unit -> { expect(unit.get(Injector.class).getInstance(ParserExecutor.class)).andReturn( unit.get(ParserExecutor.class)); }) .expect( unit -> { NativeUpload upload = unit.get(NativeUpload.class); List<String> headers = Arrays.asList("application/json"); expect(upload.headers("Content-Type")).andReturn(headers); StrParamReferenceImpl pref = unit.mockConstructor(StrParamReferenceImpl.class, new Class[]{ String.class, String.class, List.class }, "header", "Content-Type", headers); Mutant mutant = unit.mockConstructor(MutantImpl.class, new Class[]{ParserExecutor.class, Object.class }, unit.get(ParserExecutor.class), pref); expect(mutant.toOptional(MediaType.class)) .andReturn(Optional.ofNullable(MediaType.json)); }) .run(unit -> { assertEquals(MediaType.json, new UploadImpl(unit.get(Injector.class), unit.get(NativeUpload.class)).type()); }); } @Test public void deftype() throws Exception { new MockUnit(Injector.class, NativeUpload.class, ParserExecutor.class) .expect(unit -> { expect(unit.get(Injector.class).getInstance(ParserExecutor.class)).andReturn( unit.get(ParserExecutor.class)); }) .expect(unit -> { expect(unit.get(NativeUpload.class).name()).andReturn("x"); }) .expect(unit -> { NativeUpload upload = unit.get(NativeUpload.class); List<String> headers = Arrays.asList(); expect(upload.headers("Content-Type")).andReturn(headers); StrParamReferenceImpl pref = unit.mockConstructor(StrParamReferenceImpl.class, new Class[]{ String.class, String.class, List.class }, "header", "Content-Type", headers); Mutant mutant = unit.mockConstructor(MutantImpl.class, new Class[]{ParserExecutor.class, Object.class }, unit.get(ParserExecutor.class), pref); expect(mutant.toOptional(MediaType.class)) .andReturn(Optional.ofNullable(null)); }) .run(unit -> { assertEquals(MediaType.octetstream, new UploadImpl(unit.get(Injector.class), unit.get(NativeUpload.class)).type()); }); } @Test public void typeFromName() throws Exception { new MockUnit(Injector.class, NativeUpload.class, ParserExecutor.class) .expect(unit -> { expect(unit.get(Injector.class).getInstance(ParserExecutor.class)).andReturn( unit.get(ParserExecutor.class)); }) .expect(unit -> { expect(unit.get(NativeUpload.class).name()).andReturn("x.js"); }) .expect(unit -> { NativeUpload upload = unit.get(NativeUpload.class); List<String> headers = Arrays.asList(); expect(upload.headers("Content-Type")).andReturn(headers); StrParamReferenceImpl pref = unit.mockConstructor(StrParamReferenceImpl.class, new Class[]{ String.class, String.class, List.class }, "header", "Content-Type", headers); Mutant mutant = unit.mockConstructor(MutantImpl.class, new Class[]{ParserExecutor.class, Object.class }, unit.get(ParserExecutor.class), pref); expect(mutant.toOptional(MediaType.class)) .andReturn(Optional.ofNullable(null)); }) .run(unit -> { assertEquals(MediaType.js, new UploadImpl(unit.get(Injector.class), unit.get(NativeUpload.class)).type()); }); } }