From 09aa46f04b077243023c13a1a83e41976231b68e Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 23 Aug 2017 18:23:37 +0200 Subject: [PATCH] SONAR-9616 Refactor RawActionTest to not use mock --- .../sonar/server/source/ws/RawActionTest.java | 94 +++++++++---------- 1 file changed, 46 insertions(+), 48 deletions(-) diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/ws/RawActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/source/ws/RawActionTest.java index a6dac2f6a9d..32d52f34ebc 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/ws/RawActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/ws/RawActionTest.java @@ -19,82 +19,80 @@ */ package org.sonar.server.source.ws; -import java.util.Optional; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.junit.rules.ExpectedException; import org.sonar.api.resources.Qualifiers; +import org.sonar.api.utils.System2; import org.sonar.api.web.UserRole; -import org.sonar.db.DbClient; -import org.sonar.db.DbSession; -import org.sonar.db.component.ComponentDao; +import org.sonar.db.DbTester; import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentTesting; import org.sonar.db.component.ResourceTypesRule; -import org.sonar.db.organization.OrganizationTesting; import org.sonar.server.component.ComponentFinder; import org.sonar.server.exceptions.ForbiddenException; +import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.source.SourceService; import org.sonar.server.tester.UserSessionRule; -import org.sonar.server.ws.WsTester; +import org.sonar.server.ws.WsActionTester; -import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; +import static org.sonar.db.protobuf.DbFileSources.Data; +import static org.sonar.db.protobuf.DbFileSources.Line; -@RunWith(MockitoJUnitRunner.class) public class RawActionTest { @Rule - public UserSessionRule userSessionRule = UserSessionRule.standalone(); + public ExpectedException expectedException = ExpectedException.none(); + @Rule + public UserSessionRule userSession = UserSessionRule.standalone(); + @Rule + public DbTester db = DbTester.create(System2.INSTANCE); - @Mock - DbClient dbClient; + private ResourceTypesRule resourceTypes = new ResourceTypesRule().setRootQualifiers(Qualifiers.PROJECT); - @Mock - DbSession session; + private WsActionTester ws = new WsActionTester(new RawAction(db.getDbClient(), + new SourceService(db.getDbClient(), null), userSession, + new ComponentFinder(db.getDbClient(), resourceTypes))); - @Mock - ComponentDao componentDao; + @Test + public void raw_from_file() throws Exception { + ComponentDto project = db.components().insertPrivateProject(); + userSession.addProjectPermission(UserRole.CODEVIEWER, project); + ComponentDto file = db.components().insertComponent(ComponentTesting.newFileDto(project)); + db.fileSources().insertFileSource(file, s -> s.setSourceData( + Data.newBuilder() + .addLines(Line.newBuilder().setLine(1).setSource("public class HelloWorld {").build()) + .addLines(Line.newBuilder().setLine(2).setSource("}").build()) + .build())); - @Mock - SourceService sourceService; + String result = ws.newRequest() + .setParam("key", file.getKey()) + .execute().getInput(); - WsTester tester; + assertThat(result).isEqualTo("public class HelloWorld {\n}\n"); + } - ComponentDto project = ComponentTesting.newPrivateProjectDto(OrganizationTesting.newOrganizationDto()); - ComponentDto file = ComponentTesting.newFileDto(project, null); + @Test + public void fail_on_unknown_file() throws Exception { + expectedException.expect(NotFoundException.class); + expectedException.expectMessage("Component key 'unknown' not found"); - @Before - public void setUp() { - when(dbClient.componentDao()).thenReturn(componentDao); - when(dbClient.openSession(false)).thenReturn(session); - tester = new WsTester(new SourcesWs(new RawAction(dbClient, sourceService, userSessionRule, - new ComponentFinder(dbClient, new ResourceTypesRule().setRootQualifiers(Qualifiers.PROJECT))))); + ws.newRequest() + .setParam("key", "unknown") + .execute(); } @Test - public void get_txt() throws Exception { - String fileKey = "src/Foo.java"; - userSessionRule.addProjectPermission(UserRole.CODEVIEWER, project); - when(componentDao.selectByKey(session, fileKey)).thenReturn(com.google.common.base.Optional.of(file)); - - Iterable lines = newArrayList( - "public class HelloWorld {", - "}"); - when(sourceService.getLinesAsRawText(session, file.uuid(), 1, Integer.MAX_VALUE)).thenReturn(Optional.of(lines)); + public void fail_when_wrong_permission() throws Exception { + ComponentDto project = db.components().insertPrivateProject(); + userSession.addProjectPermission(UserRole.ISSUE_ADMIN, project); + ComponentDto file = db.components().insertComponent(ComponentTesting.newFileDto(project)); - WsTester.TestRequest request = tester.newGetRequest("api/sources", "raw").setParam("key", fileKey); - String result = request.execute().outputAsString(); - assertThat(result).isEqualTo("public class HelloWorld {\n}\n"); - } + expectedException.expect(ForbiddenException.class); - @Test(expected = ForbiddenException.class) - public void requires_code_viewer_permission() throws Exception { - when(componentDao.selectByKey(session, "src/Foo.java")).thenReturn(com.google.common.base.Optional.of(file)); - tester.newGetRequest("api/sources", "raw").setParam("key", "src/Foo.java").execute(); + ws.newRequest() + .setParam("key", file.getKey()) + .execute(); } } -- 2.39.5