Skip to content
Snippets Groups Projects
Commit 6e10cba1 authored by Reichardt Jasper's avatar Reichardt Jasper
Browse files

ApiService initial commit. did some testing in /test.

parent 8b70c297
Branches master
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.1</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>org.fairkom</groupId>
<artifactId>ApiService</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package apiservice;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApiServiceApp implements CommandLineRunner {
public static void main(String [] args) {
SpringApplication.run(ApiServiceApp.class, args);
}
@Override
public void run(String... args) {
}
}
package apiservice.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Map;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Asset {
String title;
String registrar;
String description;
String attribution;
String publisher;
String creation_date;
String type;
String license;
String license_dual;
String license_addons;
String license_DALICC;
String identifier;
String IPFS;
String NFT;
String filename;
String hash;
String hash_sha;
String hash_sha512;
String revocation_date;
String revocation_reason;
String registration_date;
String tags;
String relation;
String supersedes;
String counter;
String publishing_date;
String grid;
String public_certificate;
String language;
String visibility;
Map<String, String> attributes;
String customkey0;
String customkey1;
String customkey2;
String customkey3;
String customkey4;
String customkey5;
String customkey6;
String customkey7;
String customkey8;
String customkey9;
}
package apiservice.repo;
import apiservice.model.Asset;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Repository
public class AssetRepo implements IAssetRepo<Asset> {
private final Map<String, List<Asset>> repository = new HashMap<>();
@Override
public List<Asset> findAllByUid(String uid) {
return repository.get(uid);
}
@Override
public Asset save(Asset asset, String uid) {
repository.get(uid).add(asset);
return asset;
}
}
package apiservice.repo;
import java.util.List;
public interface IAssetRepo<Asset> {
List<Asset> findAllByUid(String uid);
Asset save(Asset asset, String uid);
}
package apiservice.service;
import apiservice.model.Asset;
import apiservice.service.ApiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/assets/")
public class ApiController {
private final ApiService service;
@Autowired
public ApiController(ApiService service) {
this.service = service;
}
@GetMapping(produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<List<Asset>> getAssets(@RequestParam(name ="uid") String uid) {
List<Asset> assets = service.getAssets(uid);
return new ResponseEntity<>(assets, HttpStatus.OK);
}
@PostMapping(produces = {MediaType.APPLICATION_JSON_VALUE})
public void postAsset(@RequestBody() Asset asset, @RequestParam(name = "uid") String uid) {
service.saveAsset(asset,uid);
}
}
package apiservice.service;
import apiservice.repo.IAssetRepo;
import apiservice.model.Asset;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ApiService {
private final IAssetRepo repo;
@Autowired
public ApiService(IAssetRepo repo) {
this.repo = repo;
}
public List<Asset> getAssets(String uid) {
return repo.findAllByUid(uid);
}
public void saveAsset(Asset asset, String uid) {
repo.save(asset,uid);
}
}
package apiservice;
import apiservice.model.Asset;
import apiservice.repo.AssetRepo;
import apiservice.service.ApiController;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.*;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import java.util.Map;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@WebMvcTest(ApiController.class)
class ApiControllerTest {
@Autowired
MockMvc mockMvc;
@Autowired
ObjectMapper mapper;
@MockBean
ApiController apiController;
@MockBean
AssetRepo assetRepo;
@Test
public void contextLoads() {
assert (apiController != null);
}
@Test
void postAsset() throws Exception {
Asset asset = new Asset();
asset.setTitle("test title");
asset.setAttributes(Map.ofEntries(Map.entry("test attribute", "blue")));
Mockito.when(assetRepo.save(asset, "1")).thenReturn(asset);
MockHttpServletRequestBuilder mockRequest = MockMvcRequestBuilders.post("/assets/")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(MediaType.APPLICATION_JSON_VALUE)
.content(this.mapper.writeValueAsString(asset))
.param("uid", "1");
mockMvc.perform(mockRequest)
.andExpect(status().isOk());
}
@Test
void getAssets() throws Exception {
mockMvc.perform(MockMvcRequestBuilders
.get("/assets/").param("uid", "1")
.contentType(MediaType.APPLICATION_JSON_VALUE))
.andExpect(status().isOk());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment