dhp-graph-dump/dump/src/test/java/eu/dnetlib/dhp/oa/graph/dump/complete/CreateEntityTest.java

154 lines
45 KiB
Java
Raw Normal View History

package eu.dnetlib.dhp.oa.graph.dump.complete;
import static org.mockito.Mockito.lenient;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocalFileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionCodecFactory;
2023-10-31 10:38:09 +01:00
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import com.google.gson.Gson;
2023-10-31 10:42:43 +01:00
import eu.dnetlib.dhp.communityapi.QueryCommunityAPI;
import eu.dnetlib.dhp.communityapi.model.CommunityModel;
import eu.dnetlib.dhp.oa.graph.dump.UtilCommunityAPI;
2022-08-03 11:42:56 +02:00
import eu.dnetlib.dhp.oa.model.graph.ResearchCommunity;
import eu.dnetlib.dhp.oa.model.graph.ResearchInitiative;
import eu.dnetlib.dhp.utils.DHPUtils;
@ExtendWith(MockitoExtension.class)
public class CreateEntityTest {
2023-10-31 10:42:43 +01:00
private static final String validCommunities = "[{\"id\":\"eut\",\"name\":\"EUt+\",\"description\":\"<p>EUt+ is an "
+
"alliance of 8 universities: Technological University Dublin, Riga Technical University, Cyprus University " +
"of Technology, Technical University of Cluj-Napoca, Polytechnic University of Cartagena, University of " +
"Technology of Troyes, Technical University of Sofia and Hochschule Darmstadt.</p>\",\"status\":\"all\"," +
"\"type\":\"community\",\"subjects\":null,\"zenodoCommunity\":\"\"},{\"id\":\"knowmad\",\"name\":\"Knowmad Institut\",\"description\":\"<p><img alt=\\\"\\\" src=\\\"https://knowmadinstitut.org/wp-content/uploads/2022/12/OPEN-ACCESS-PLATINUMkjok-e1671629265802.png\\\" style=\\\"height:200px; width:400px\\\" /></p> <p>The Knowmad Research Gateway facilitates researchers, policymakers, activists, and experts to discover publications, data, software, and other research products&nbsp; related to <strong>Human Rights, Sustainable Development, Drug Policy, New Technologies, Ethnobotany, and Special Populations.&nbsp; </strong></p> <p>The European Institute for Multidisciplinary Studies on Human Rights &amp; Science - Knowmad Institut is an independent Think &amp; Do Tank based in Brandenburg, Germany, promoting Human Dignity and Open Science in Public and Private Policies....<u><a href=\\\"https://knowmadinstitut.org/about-us/\\\" target=\\\"_blank\\\">Click Here For More Information.</a></u></p> <ul> <li>If you would like to suggest research inputs with bibliographic information,<strong> <a href=\\\"https://forms.gle/1JUGPivX47iEtNgP7\\\" target=\\\"_blank\\\">Please Use This Form</a>.</strong></li> </ul> <hr /> <p>El Knowmad Research Gateway facilita a investigadores, responsables pol&iacute;ticos, activistas y expertos el descubrimiento de publicaciones, datos, software y otros productos de investigaci&oacute;n relacionados con los <strong>Derechos Humanos, el Desarrollo Sostenible, las Pol&iacute;ticas de Drogas, las Nuevas Tecnolog&iacute;as, la Etnobot&aacute;nica y las Poblaciones Especiales.</strong><br /> <br /> El Instituto Europeo de Estudios Multidisciplinares sobre Derechos Humanos y Ciencia - Knowmad Institut es un Think &amp; Do Tank independiente con sede en Brandenburgo, Alemania, que promueve la Dignidad Humana y la Ciencia Abierta en las Pol&iacute;ticas P&uacute;blicas y Privadas...<a href=\\\"https://knowmadinstitut.org/es/quienes-somos/\\\">.Haga clic aqu&iacute; para obtener m&aacute;s informaci&oacute;n.</a><br /> <br /> Si desea sugerir aportaciones de investigaci&oacute;n con informaci&oacute;n bibliogr&aacute;fica, <strong><a href=\\\"http://forms.gle/1JUGPivX47iEtNgP7\\\">Utilice Este Formulario.</a></strong></p> <hr /> <p>Das Knowmad Research Gateway erm&ouml;glicht Forschern, politischen Entscheidungstr&auml;gern, Aktivisten und Experten die Entdeckung von Publikationen, Daten, Software und anderen Forschungsprodukten im Zusammenhang mit <strong>Menschenrechten, nachhaltiger Entwicklung, Drogenpolitik, neuen Technologien, Ethnobotanik und speziellen Bev&ouml;lkerungsgruppen.</strong></p> <p>Das Europ&auml;ische Institut f&uuml;r multidisziplin&auml;re Studien zu Menschenrechten und Wissenschaft - Knowmad Institut ist ein unabh&auml;ngiger Think &amp; Do Tank mit Sitz in Brandenburg (Deutschland), der sich f&uuml;r Menschenw&uuml;rde und Open Science in &ouml;ffentlichen und privaten Politiken einsetzt&hellip; <a href=\\\"https://knowmadinstitut.org/de/ueber-uns/\\\">Klicken Sie hier f&uuml;r weitere Informationen</a>.</p> <p>Wenn Sie Forschungseingaben mit bibliographischen Informationen vorschlagen m&ouml;chten, <strong><a href=\\\"http://forms.gle/1JUGPivX47iEtNgP7\\\">nutzen Sie bitte dieses Formular.</a></strong></p> <p>&nbsp;</p>\",\"status\":\"all\",\"type\":\"community\",\"subjects\":null,\"zenodoCommunity\":\"knowmadinstitut\"},{\"id\":\"netherlands\",\"name\":\"Netherlands Research Portal\",\"description\":\"<div class=\\\"uk-section uk-padding-remove-bottom uk-overflow-hidden\\\"> <div class=\\\"uk-container uk-container-large\\\" uk-scrollspy=\\\"target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200\\\"> <div class=\\\"uk-grid uk-flex-middle\\\" uk-grid=\\\"\\\"> <div class=\\\"uk-width-3-5@m uk-margin-large-bottom uk-first-column\\\"> <h1 class=\\\"uk-h2 uk-width-1-2@m uk-scrollspy-inview \\\" uk-scrollspy-class=\\\"\\\">All Dutch Research,<br /> In One Place<span class=\\\"uk-text-primary\\\">.</span></h1> <div class=\\\"uk-margin-top ng-star-inserted uk-sc
private static String workingDir;
@BeforeAll
public static void beforeAll() throws IOException {
workingDir = Files
.createTempDirectory(CreateEntityTest.class.getSimpleName())
.toString();
}
@Test
2023-10-31 10:38:09 +01:00
void test1() throws IOException {
List<ContextInfo> cInfoList = new ArrayList<>();
final Consumer<ContextInfo> consumer = ci -> cInfoList.add(ci);
2023-10-31 10:38:09 +01:00
UtilCommunityAPI queryCommunityAPI = new UtilCommunityAPI();
2023-10-31 10:42:43 +01:00
new ObjectMapper()
.readValue(validCommunities, CommunityModelList.class)
.forEach(ri -> consumer.accept(queryCommunityAPI.getContext(ri)));
List<ResearchInitiative> riList = new ArrayList<>();
cInfoList.forEach(cInfo -> riList.add(Process.getEntity(cInfo)));
2023-10-31 10:38:09 +01:00
Assertions.assertEquals(25, riList.size());
riList.stream().forEach(c -> {
switch (c.getAcronym()) {
case "mes":
Assertions
.assertTrue(c.getType().equals(eu.dnetlib.dhp.oa.graph.dump.Constants.RESEARCH_COMMUNITY));
Assertions.assertTrue(((ResearchCommunity) c).getSubject().size() == 5);
Assertions.assertTrue(((ResearchCommunity) c).getSubject().contains("marine"));
Assertions.assertTrue(((ResearchCommunity) c).getSubject().contains("ocean"));
Assertions.assertTrue(((ResearchCommunity) c).getSubject().contains("fish"));
Assertions.assertTrue(((ResearchCommunity) c).getSubject().contains("aqua"));
Assertions.assertTrue(((ResearchCommunity) c).getSubject().contains("sea"));
Assertions
.assertTrue(
c
.getId()
.equals(
String
.format(
2023-10-31 10:42:43 +01:00
"%s::%s", Constants.CONTEXT_NS_PREFIX,
DHPUtils.md5(c.getAcronym()))));
Assertions.assertTrue(c.getZenodo_community().equals("https://zenodo.org/communities/oac_mes"));
Assertions.assertTrue("mes".equals(c.getAcronym()));
break;
case "clarin":
Assertions
.assertTrue(c.getType().equals(eu.dnetlib.dhp.oa.graph.dump.Constants.RESEARCH_INFRASTRUCTURE));
Assertions
.assertTrue(
c
.getId()
.equals(
String
.format(
2023-10-31 10:42:43 +01:00
"%s::%s", Constants.CONTEXT_NS_PREFIX,
DHPUtils.md5(c.getAcronym()))));
Assertions.assertTrue(c.getZenodo_community().equals("https://zenodo.org/communities/oac_clarin"));
Assertions.assertTrue("clarin".equals(c.getAcronym()));
break;
}
// TODO add check for all the others Entities
});
riList.forEach(c -> System.out.println(new Gson().toJson(c)));
}
@Test
@Disabled
void test2() throws IOException {
LocalFileSystem fs = FileSystem.getLocal(new Configuration());
Path hdfsWritePath = new Path(workingDir + "/prova");
FSDataOutputStream fsDataOutputStream = null;
if (fs.exists(hdfsWritePath)) {
fsDataOutputStream = fs.append(hdfsWritePath);
} else {
fsDataOutputStream = fs.create(hdfsWritePath);
}
CompressionCodecFactory factory = new CompressionCodecFactory(fs.getConf());
CompressionCodec codec = factory.getCodecByClassName("org.apache.hadoop.io.compress.GzipCodec");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(codec.createOutputStream(fsDataOutputStream),
StandardCharsets.UTF_8));
List<ContextInfo> cInfoList = new ArrayList<>();
final Consumer<ContextInfo> consumer = ci -> cInfoList.add(ci);
2023-10-31 10:38:09 +01:00
UtilCommunityAPI queryCommunityAPI = new UtilCommunityAPI();
queryCommunityAPI.getContextInformation().forEach(ci -> consumer.accept(ci));
for (ContextInfo cInfo : cInfoList) {
writer.write(new Gson().toJson(Process.getEntity(cInfo)));
}
writer.close();
}
}
2023-10-31 10:42:43 +01:00
2023-10-31 10:38:09 +01:00
class CommunityModelList extends ArrayList<CommunityModel> {
2023-10-31 10:42:43 +01:00
public CommunityModelList() {
2023-10-31 10:38:09 +01:00
super();
}
}