Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
042ea1e
GP19-151: WIP docker compose and mapping
Dec 10, 2019
711e857
GP19-151: WIP docker compose and mapping
Dec 10, 2019
94e87f6
GP19-151: WIP elasticsearch endpoint
Dec 17, 2019
9e83d36
GP19-151: WIP docker compose file
Dec 17, 2019
ef73118
GP19-151: WIP endpoint for finding a conference by topic
Dec 18, 2019
be2693c
GP19-151: WIP started writing integration tests
Dec 18, 2019
0f913e6
GP19-151: WIP integration test
Dec 19, 2019
3e002c3
GP19-15 WIP integration testing
Dec 19, 2019
31b1885
GP19-151: WIP integration testing
Dec 23, 2019
3eb20da
GP19-151: WIP integration tests
Dec 23, 2019
63708d3
GP19-151: WIP integration testing
Jan 7, 2020
ae523af
GP19-151: WIP docker compose and mapping
Dec 10, 2019
aa18ac3
GP19-151: WIP docker compose and mapping
Dec 10, 2019
d7e2c14
GP19-151: WIP elasticsearch endpoint
Dec 17, 2019
ab0fd47
GP19-151: WIP docker compose file
Dec 17, 2019
dfccfb0
GP19-151: WIP endpoint for finding a conference by topic
Dec 18, 2019
ed53e8d
GP19-151: WIP started writing integration tests
Dec 18, 2019
e93faff
GP19-151: WIP integration test
Dec 19, 2019
65aeac0
GP19-15 WIP integration testing
Dec 19, 2019
5e19674
GP19-151: WIP integration testing
Dec 23, 2019
0bf3a41
GP19-151: WIP integration tests
Dec 23, 2019
3c5c19d
GP19-151: WIP integration testing
Jan 7, 2020
163828e
GP19-151: WIP version changes to try to fix integration test errors
Jan 8, 2020
ce45460
GP19-151: rebased with master
Jan 8, 2020
a736937
GP19-151: fixed unnecessary imports
Jan 10, 2020
4dc3e7d
GP19-151: fixed errors in code and added analyser to mapping
Jan 15, 2020
f7e91f7
GP19-151: topic, name, description, city all searchable
GBurley-Jones Jan 15, 2020
20b3b57
GP19-151: WIP analyser
Feb 4, 2020
f2cc701
Merge branch 'GP19-151_ESC_READ-new' of https://github.com/Mendeley/g…
Feb 4, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
package com.gradproject2019;

import gradproject2019.conferences.data.ConferenceResponseDto;
import gradproject2019.conferences.service.ConferenceService;
import gradproject2019.elasticsearch.persistence.EsConference;
import gradproject2019.elasticsearch.repository.ConferenceSearchRepository;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.test.context.junit4.SpringRunner;

import java.net.URI;
import java.net.URISyntaxException;

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ElasticsearchIT {

@LocalServerPort
int testServerPort;
private String baseUri;

@Before
public void setUp() {
baseUri = "http://localhost:" + testServerPort + "/conferences";
}

@Autowired
public TestRestTemplate restTemplate;

@Autowired
private ConferenceService conferenceService;

@Autowired
ConferenceSearchRepository repository;

// @Autowired
// ElasticsearchTemplate template;

// @Test
// public void shouldSaveEsConferenceToSearchRepository() {
// EsConference esConference = new EsConference();
// esConference.setId(1L);
// esConference.setName("SophiaCon");
// //esConference.setDateTime(Instant.now());
// esConference.setCity("London");
// esConference.setDescription("A conference");
// esConference.setTopic("Sophia");
//
// EsConference savedConference = repository.save(esConference);
//
// assertThat(savedConference).isSameAs(esConference);
// }
//
// @Test
// public void testFindAll() {
// Iterable<EsConference> esConference = repository.findAll();
// Assert.assertTrue(esConference.iterator().hasNext());
// }
//
// @Test
// public void testFindByTopic() {
// Page<EsConference> esConference = repository.findByTopic("Sophia", PageRequest.of(1, 1));
// Assert.assertTrue(esConference.getTotalPages() > 0);
//
// }
//
// @Test
// public void shouldReturn200AndEmptyListWhenNoConferences() throws URISyntaxException {
// URI uri = new URI(baseUri);
//
// ResponseEntity<List<ConferenceResponseDto>> response = getConferenceList(uri);
//
// Assert.assertEquals(200, response.getStatusCodeValue());
// Assert.assertEquals(true, response.getBody().isEmpty());
// }
//
// @Test
// public void shouldReturn200AndListOfConferencesWhenConferenceExists() throws URISyntaxException {
// URI uri = new URI(baseUri);
// Conference addedConference = conferenceRepository.saveAndFlush(conference);
//
// ResponseEntity<List<ConferenceResponseDto>> response = getConferenceList(uri);
//
// Assert.assertEquals(200, response.getStatusCodeValue());
// Assert.assertEquals(conference.getName(), response.getBody().get(0).getName());
// Assert.assertEquals(addedConference.getId(),response.getBody().get(0).getId());
// }

@Test
public void testFindByTopic() throws URISyntaxException {
EsConference esConference = new EsConference();
esConference.setId(1L);
esConference.setName("SophiaCon");
//esConference.setDateTime(Instant.now());
esConference.setCity("London");
esConference.setDescription("A conference");
esConference.setTopic("Sophia");

EsConference esConference2 = new EsConference();
esConference2.setId(2L);
esConference2.setName("SophiaCon2");
//esConference.setDateTime(Instant.now());
esConference2.setCity("London2");
esConference2.setDescription("A conference2");
esConference2.setTopic("Sophia2");


restTemplate.getRestTemplate().setRequestFactory(new HttpComponentsClientHttpRequestFactory());

EsConference savedConference = repository.save(esConference);
//EsConference savedConference2 = repository.save(esConference2);
URI uri = new URI(baseUri + "?topic=Sophia&page=1&size=10");
//URI uri2 = new URI(baseUri );


//List<ConferenceResponseDto> conferences = conferenceService.findByConferenceTopic("Sophia", 1, 1);

ResponseEntity<ConferenceResponseDto> response = getEsConferenceList(uri);

Assert.assertNotNull(response);
Assert.assertEquals(200, response.getStatusCodeValue());
//Assert.assertEquals(1, response.size());
//Assert.assertEquals(esConference.getName(), response.getBody().get(0).getName());
}

private ResponseEntity<ConferenceResponseDto> getEsConferenceList(URI uri) {
return restTemplate.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference<ConferenceResponseDto>() {});
}

}

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.gradproject2019.auth;

import com.gradproject2019.auth.data.LoginDto;
import com.gradproject2019.auth.persistence.Token;
import gradproject2019.auth.data.LoginDto;
import gradproject2019.auth.persistence.Token;
import com.gradproject2019.utils.ErrorEntity;
import com.gradproject2019.utils.TestUtils;
import org.junit.After;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.gradproject2019.conferences;

import com.gradproject2019.conferences.data.ConferencePatchRequestDto;
import com.gradproject2019.conferences.data.ConferenceRequestDto;
import com.gradproject2019.conferences.data.ConferenceResponseDto;
import com.gradproject2019.conferences.persistence.Conference;
import gradproject2019.conferences.data.ConferencePatchRequestDto;
import gradproject2019.conferences.data.ConferenceRequestDto;
import gradproject2019.conferences.data.ConferenceResponseDto;
import gradproject2019.conferences.persistence.Conference;
import com.gradproject2019.utils.ErrorEntity;
import com.gradproject2019.utils.TestUtils;
import org.junit.After;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.gradproject2019.user;

import com.gradproject2019.auth.persistence.Token;
import com.gradproject2019.users.data.UserPatchRequestDto;
import com.gradproject2019.users.data.UserRequestDto;
import com.gradproject2019.users.data.UserResponseDto;
import com.gradproject2019.users.persistence.User;
import gradproject2019.auth.persistence.Token;
import gradproject2019.users.data.UserPatchRequestDto;
import gradproject2019.users.data.UserRequestDto;
import gradproject2019.users.data.UserResponseDto;
import gradproject2019.users.persistence.User;
import com.gradproject2019.utils.ErrorEntity;
import com.gradproject2019.utils.TestUtils;
import org.junit.After;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.gradproject2019.userConference;

import com.gradproject2019.conferences.data.ConferenceResponseDto;
import com.gradproject2019.userConference.data.UserConferenceRequestDto;
import com.gradproject2019.userConference.data.UserConferenceResponseDto;
import com.gradproject2019.userConference.persistence.UserConference;
import gradproject2019.conferences.data.ConferenceResponseDto;
import gradproject2019.userConference.data.UserConferenceRequestDto;
import gradproject2019.userConference.data.UserConferenceResponseDto;
import gradproject2019.userConference.persistence.UserConference;
import com.gradproject2019.utils.ErrorEntity;
import com.gradproject2019.utils.TestUtils;
import org.junit.After;
Expand All @@ -22,7 +22,7 @@
import java.net.URISyntaxException;
import java.util.List;

import static com.gradproject2019.userConference.data.UserConferenceRequestDto.UserConferenceRequestDtoBuilder.anUserConferenceRequestDto;
import static gradproject2019.userConference.data.UserConferenceRequestDto.UserConferenceRequestDtoBuilder.anUserConferenceRequestDto;
import static org.springframework.http.HttpMethod.GET;
import static org.springframework.http.HttpMethod.POST;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package com.gradproject2019.utils;

import com.gradproject2019.auth.persistence.Token;
import com.gradproject2019.auth.repository.AuthRepository;
import com.gradproject2019.auth.service.AuthService;
import com.gradproject2019.conferences.persistence.Conference;
import com.gradproject2019.conferences.repository.ConferenceRepository;
import com.gradproject2019.userConference.persistence.UserConference;
import com.gradproject2019.userConference.repository.UserConferenceRepository;
import com.gradproject2019.userConference.service.UserConferenceService;
import com.gradproject2019.users.persistence.User;
import com.gradproject2019.users.repository.UserRepository;
import gradproject2019.auth.persistence.Token;
import gradproject2019.auth.repository.AuthRepository;
import gradproject2019.auth.service.AuthService;
import gradproject2019.conferences.persistence.Conference;
import gradproject2019.conferences.repository.ConferenceRepository;
import gradproject2019.userConference.persistence.UserConference;
import gradproject2019.userConference.repository.UserConferenceRepository;
import gradproject2019.userConference.service.UserConferenceService;
import gradproject2019.users.persistence.User;
import gradproject2019.users.repository.UserRepository;
import gradproject2019.utils.AuthUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.HttpHeaders;
Expand Down
44 changes: 44 additions & 0 deletions SpringProject/MainApplication/src/main/curl/Index.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"settings": {
"index": {
"number_of_shards": 3,
"number_of_replicas": 2
},
"analysis": {
"normalizer": {
"standard_lowercase": {
"type": "custom",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "text"
},
"city": {
"type": "keyword"
},
"description": {
"type": "text"
},
"topic": {
"type": "text",
"analyser": "simple",
"fields": {
"keyword":{
"type": "keyword",
"normalizer": "standard_lowercase"
}
}
},
"dateTime": {
"type": "date"
}
}
}
}


1 change: 1 addition & 0 deletions SpringProject/MainApplication/src/main/curl/Index.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
curl -X PUT "http://localhost:9200/mock_conferences" -H "Content-Type: application/json" --data-binary @index.json
22 changes: 22 additions & 0 deletions SpringProject/MainApplication/src/main/curl/MockConferences.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[
{
"name": "Sophia's Conference",
"city": "London",
"description": "A conference about Sophia",
"topic": "People"
},

{
"name": "Grace's Conference",
"city": "Sheffield",
"description": "All about why Sheffield is the best city in the world",
"topic": "Travel"
},

{
"name": "Karen's Conference",
"city": "Rome",
"description": "Its-a conference about-a pasta",
"topic": "Food"
}
]
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import gradproject2019.conferences.data.ConferencePatchRequestDto;
import gradproject2019.conferences.data.ConferenceRequestDto;
import gradproject2019.conferences.data.ConferenceResponseDto;

import gradproject2019.conferences.service.ConferenceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
Expand All @@ -13,6 +14,8 @@
import java.util.List;
import java.util.UUID;

import static org.hibernate.annotations.common.util.StringHelper.isNotEmpty;

@CrossOrigin(origins = "http://localhost:3000")
@Controller
@RequestMapping("/conferences")
Expand All @@ -22,8 +25,32 @@ public class ConferenceController {
private ConferenceService conferenceService;

@GetMapping
public ResponseEntity<List<ConferenceResponseDto>> getAllConferences() {
List<ConferenceResponseDto> conferences = conferenceService.getAllConferences();
public ResponseEntity<List<ConferenceResponseDto>> getAllConferences(
@RequestParam(required = false) String name,
@RequestParam(required = false) String city,
@RequestParam(required = false) String description,
@RequestParam(required = false) String topic,
@RequestParam(required = false, defaultValue = "0") Integer page,
@RequestParam(required = false, defaultValue = "500") Integer size) {

List<ConferenceResponseDto> conferences;

if (isNotEmpty(topic)) {
conferences = conferenceService.findByConferenceTopic(topic, page, size);
}
else if (isNotEmpty(name)) {
conferences = conferenceService.findByConferenceName(name, page, size);
}
else if (isNotEmpty(city)) {
conferences = conferenceService.findByConferenceCity(city, page, size);
}
else if (isNotEmpty(description)) {
conferences = conferenceService.findByConferenceDescription(description, page, size);
}
else {
conferences = conferenceService.getAllConferences();
}

return ResponseEntity.ok(conferences);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package gradproject2019.conferences.data;

import gradproject2019.conferences.persistence.Conference;
import gradproject2019.elasticsearch.persistence.EsConference;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotNull;
Expand Down Expand Up @@ -64,6 +65,17 @@ public ConferenceResponseDto from(Conference conference) {
.build();
}

public ConferenceResponseDto from(EsConference esConference) {
return new ConferenceResponseDtoBuilder()
.withId(esConference.getId())
.withName(esConference.getName())
// .withDateTime(esConference.getDateTime()) //FIXME: add to EsConference
.withCity(esConference.getCity())
.withDescription(esConference.getDescription())
.withTopic(esConference.getTopic())
.build();
}

public static final class ConferenceResponseDtoBuilder {
private Long id;
private String name;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,12 @@ public interface ConferenceService {
void deleteConference(UUID token, Long conferenceId);

ConferenceResponseDto editConference(UUID token, Long conferenceId, ConferencePatchRequestDto conferencePatchRequestDto);

List<ConferenceResponseDto> findByConferenceName(String name, Integer page, Integer size);

List<ConferenceResponseDto> findByConferenceCity(String city, Integer page, Integer size);

List<ConferenceResponseDto> findByConferenceDescription(String description, Integer page, Integer size);

List<ConferenceResponseDto> findByConferenceTopic(String topic, Integer page, Integer size);
}
Loading