Andrew Grant 3 недель назад
Родитель
Сommit
20a8ceeb90
14 измененных файлов с 212 добавлено и 51 удалено
  1. 12 0
      docs/levels.txt
  2. 0 3
      src/main/java/scot/carricksoftware/grantswriter/constants/LatexConstants.java
  3. 27 0
      src/main/java/scot/carricksoftware/grantswriter/constants/LatexLevels.java
  4. 11 0
      src/main/java/scot/carricksoftware/grantswriter/data/helpers/LatexDivision.java
  5. 44 0
      src/main/java/scot/carricksoftware/grantswriter/data/helpers/LatexDivisionImpl.java
  6. 8 3
      src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexPartHeaderImpl.java
  7. 8 3
      src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexSectionHeaderImpl.java
  8. 8 2
      src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexSubSectionHeaderImpl.java
  9. 1 1
      src/main/java/scot/carricksoftware/grantswriter/writer/latex/parts/people/subsections/PersonSectionContentsWriterImpl.java
  10. 8 1
      src/test/java/scot/carricksoftware/grantswriter/writer/latex/LatexPartHeaderTest.java
  11. 8 1
      src/test/java/scot/carricksoftware/grantswriter/writer/latex/LatexSectionHeaderTest.java
  12. 8 1
      src/test/java/scot/carricksoftware/grantswriter/writer/latex/LatexSubSectionHeaderTest.java
  13. 69 0
      src/test/java/scot/carricksoftware/grantswriter/writer/latex/parts/people/subsections/PersonSectionContentsWriterOnyContentsTest.java
  14. 0 36
      src/test/java/scot/carricksoftware/grantswriter/writer/latex/parts/people/subsections/PersonSectionContentsWriterTest.java

+ 12 - 0
docs/levels.txt

@@ -0,0 +1,12 @@
+6.3. Numbering
+Table 6.1: Division levels
+Division Level
+\book -2
+\part -1
+\chapter 0
+\section 1
+\subsection 2
+\subsubsection 3
+\paragraph 4
+\subparagraph 5
+

+ 0 - 3
src/main/java/scot/carricksoftware/grantswriter/constants/LatexConstants.java

@@ -23,9 +23,6 @@ public class LatexConstants {
     @SuppressWarnings("SpellCheckingInspection")
     public static final String LONG_TABLE_START = "\\begin{longtable}{";
 
-    public static final String PART_TERM = "\\part{";
-    public static final String SECTION_TERM = "\\section{";
-    public static final String SUBSECTION_TERM = "\\subsection{";
     @SuppressWarnings("SpellCheckingInspection")
     public static final String USE_PACKAGE_TERM = "\\usepackage{";
     public static final String TERM_END = "}";

+ 27 - 0
src/main/java/scot/carricksoftware/grantswriter/constants/LatexLevels.java

@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grantswriter.constants;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class LatexLevels {
+
+    private LatexLevels() {
+        // to stop checkstyle complaining
+    }
+
+    public static final Integer LATEX_BOOK  = -2;
+    public static final Integer LATEX_PART  = -1;
+    public static final Integer LATEX_CHAPTER  = 0;
+    public static final Integer LATEX_SECTION  = 1;
+    public static final Integer LATEX_SUBSECTION  = 2;
+    public static final Integer LATEX_SUB_SUBSECTION  = 3;
+    public static final Integer LATEX_PARAGRAPH  = 4;
+    public static final Integer LATEX_SUBPARAGRAPH = 5;
+
+
+}

+ 11 - 0
src/main/java/scot/carricksoftware/grantswriter/data/helpers/LatexDivision.java

@@ -0,0 +1,11 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grantswriter.data.helpers;
+
+public interface LatexDivision {
+
+    String header(Integer Level);
+}

+ 44 - 0
src/main/java/scot/carricksoftware/grantswriter/data/helpers/LatexDivisionImpl.java

@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grantswriter.data.helpers;
+
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_BOOK;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_CHAPTER;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_PARAGRAPH;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_PART;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_SECTION;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_SUBPARAGRAPH;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_SUBSECTION;
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_SUB_SUBSECTION;
+
+@Component
+public class LatexDivisionImpl implements  LatexDivision {
+
+    private final Map<Integer, String> headers;
+
+    public LatexDivisionImpl() {
+        headers = new HashMap<>();
+        headers.put(LATEX_BOOK, "\\book{");
+        headers.put(LATEX_PART, "\\part{");
+        headers.put(LATEX_CHAPTER, "\\chapter{");
+        headers.put(LATEX_SECTION, "\\section{");
+        headers.put(LATEX_SUBSECTION, "\\subsection{");
+        //noinspection SpellCheckingInspection
+        headers.put(LATEX_SUB_SUBSECTION, "\\subsubsection{");
+        headers.put(LATEX_PARAGRAPH, "\\paragraph{");
+        headers.put(LATEX_SUBPARAGRAPH, "\\subparagraph{");
+    }
+
+    @Override
+    public String header(Integer level) {
+        return headers.get(level);
+    }
+}

+ 8 - 3
src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexPartHeaderImpl.java

@@ -7,22 +7,27 @@ package scot.carricksoftware.grantswriter.writer.latex;
 
 import org.springframework.stereotype.Component;
 import scot.carricksoftware.grantswriter.constants.LatexConstants;
+import scot.carricksoftware.grantswriter.data.helpers.LatexDivision;
 import scot.carricksoftware.grantswriter.writer.FileWriter;
 
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_PART;
+
 @Component
 public class LatexPartHeaderImpl implements LatexPartHeader {
 
 
     private final FileWriter fileWriter;
 
-    public LatexPartHeaderImpl(FileWriter fileWriter) {
+    private final LatexDivision latexDivision;
+
+    public LatexPartHeaderImpl(FileWriter fileWriter, LatexDivision latexDivision) {
         this.fileWriter = fileWriter;
+        this.latexDivision = latexDivision;
     }
 
-
     @Override
     public void write(String title) {
-        String sb = LatexConstants.PART_TERM +
+        String sb = latexDivision.header(LATEX_PART) +
                 title +
                 LatexConstants.TERM_END;
         fileWriter.writeLine(sb);

+ 8 - 3
src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexSectionHeaderImpl.java

@@ -7,22 +7,27 @@ package scot.carricksoftware.grantswriter.writer.latex;
 
 import org.springframework.stereotype.Component;
 import scot.carricksoftware.grantswriter.constants.LatexConstants;
+import scot.carricksoftware.grantswriter.data.helpers.LatexDivision;
 import scot.carricksoftware.grantswriter.writer.FileWriter;
 
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_SECTION;
+
 @Component
 public class LatexSectionHeaderImpl implements LatexSectionHeader {
 
-
     private final FileWriter fileWriter;
 
-    public LatexSectionHeaderImpl(FileWriter fileWriter) {
+    private final LatexDivision latexDivision;
+
+    public LatexSectionHeaderImpl(FileWriter fileWriter, LatexDivision latexDivision) {
         this.fileWriter = fileWriter;
+        this.latexDivision = latexDivision;
     }
 
 
     @Override
     public void write(String title) {
-        String sb = LatexConstants.SECTION_TERM +
+        String sb =  latexDivision.header(LATEX_SECTION) +
                 title +
                 LatexConstants.TERM_END;
         fileWriter.writeLine(sb);

+ 8 - 2
src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexSubSectionHeaderImpl.java

@@ -7,20 +7,26 @@ package scot.carricksoftware.grantswriter.writer.latex;
 
 import org.springframework.stereotype.Component;
 import scot.carricksoftware.grantswriter.constants.LatexConstants;
+import scot.carricksoftware.grantswriter.data.helpers.LatexDivision;
 import scot.carricksoftware.grantswriter.writer.FileWriter;
 
+import static scot.carricksoftware.grantswriter.constants.LatexLevels.LATEX_SUBSECTION;
+
 @Component
 public class LatexSubSectionHeaderImpl implements LatexSubSectionHeader {
 
     private final FileWriter fileWriter;
 
-    public LatexSubSectionHeaderImpl(FileWriter fileWriter) {
+    private final LatexDivision latexDivision;
+
+    public LatexSubSectionHeaderImpl(FileWriter fileWriter, LatexDivision latexDivision) {
         this.fileWriter = fileWriter;
+        this.latexDivision = latexDivision;
     }
 
     @Override
     public void write(String title) {
-        String sb = LatexConstants.SUBSECTION_TERM +
+        String sb = latexDivision.header(LATEX_SUBSECTION) +
                 title +
                 LatexConstants.TERM_END;
         fileWriter.writeLine(sb);

+ 1 - 1
src/main/java/scot/carricksoftware/grantswriter/writer/latex/parts/people/subsections/PersonSectionContentsWriterImpl.java

@@ -42,7 +42,7 @@ public class PersonSectionContentsWriterImpl implements PersonSectionContentsWri
     }
 
     private void writeContent(PersonText personText) {
-        logger.info("PersonSectionContentsWriterImpl.write()");
+        logger.info("PersonSectionContentsWriterImpl.writeContent()");
         fileWriter.writeLine(personText.getContent());
     }
 }

+ 8 - 1
src/test/java/scot/carricksoftware/grantswriter/writer/latex/LatexPartHeaderTest.java

@@ -10,9 +10,12 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
+import scot.carricksoftware.grantswriter.data.helpers.LatexDivision;
 import scot.carricksoftware.grantswriter.writer.FileWriter;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import static scot.carricksoftware.grantswriter.GenerateCertificateRandomValues.GetRandomString;
 
 @ExtendWith(MockitoExtension.class)
@@ -23,13 +26,17 @@ class LatexPartHeaderTest {
     @Mock
     private FileWriter fileWriterMock;
 
+    @Mock
+    private LatexDivision latexDivisionMock;
+
     @BeforeEach
     void setUp() {
-        header = new LatexPartHeaderImpl(fileWriterMock);
+        header = new LatexPartHeaderImpl(fileWriterMock, latexDivisionMock);
     }
 
     @Test
     void writeTest() {
+        when(latexDivisionMock.header(any())).thenReturn("\\part{");
         String title = GetRandomString();
         header.write(title);
         String requiredString = "\\part{" + title + "}";

+ 8 - 1
src/test/java/scot/carricksoftware/grantswriter/writer/latex/LatexSectionHeaderTest.java

@@ -10,9 +10,12 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
+import scot.carricksoftware.grantswriter.data.helpers.LatexDivision;
 import scot.carricksoftware.grantswriter.writer.FileWriter;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import static scot.carricksoftware.grantswriter.GenerateCertificateRandomValues.GetRandomString;
 
 @ExtendWith(MockitoExtension.class)
@@ -23,13 +26,17 @@ class LatexSectionHeaderTest {
     @Mock
     private FileWriter fileWriterMock;
 
+    @Mock
+    private LatexDivision latexDivisionMock;
+
     @BeforeEach
     void setUp() {
-        header = new LatexSectionHeaderImpl(fileWriterMock);
+        header = new LatexSectionHeaderImpl(fileWriterMock, latexDivisionMock);
     }
 
     @Test
     void writeTest() {
+        when(latexDivisionMock.header(any())).thenReturn("\\section{");
         String title = GetRandomString();
         header.write(title);
         String requiredString = "\\section{" + title + "}";

+ 8 - 1
src/test/java/scot/carricksoftware/grantswriter/writer/latex/LatexSubSectionHeaderTest.java

@@ -10,9 +10,12 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
+import scot.carricksoftware.grantswriter.data.helpers.LatexDivision;
 import scot.carricksoftware.grantswriter.writer.FileWriter;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import static scot.carricksoftware.grantswriter.GenerateCertificateRandomValues.GetRandomString;
 
 @ExtendWith(MockitoExtension.class)
@@ -23,13 +26,17 @@ class LatexSubSectionHeaderTest {
     @Mock
     private FileWriter fileWriterMock;
 
+    @Mock
+    private LatexDivision latexDivisionMock;
+
     @BeforeEach
     void setUp() {
-        header = new LatexSubSectionHeaderImpl(fileWriterMock);
+        header = new LatexSubSectionHeaderImpl(fileWriterMock, latexDivisionMock);
     }
 
     @Test
     void writeTest() {
+        when(latexDivisionMock.header(any())).thenReturn("\\subsection{");
         String title = GetRandomString();
         header.write(title);
         String requiredString = "\\subsection{" + title + "}";

+ 69 - 0
src/test/java/scot/carricksoftware/grantswriter/writer/latex/parts/people/subsections/PersonSectionContentsWriterOnyContentsTest.java

@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grantswriter.writer.latex.parts.people.subsections;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import scot.carricksoftware.grantswriter.domains.people.Person;
+import scot.carricksoftware.grantswriter.domains.text.PersonText;
+import scot.carricksoftware.grantswriter.services.text.PersonTextService;
+import scot.carricksoftware.grantswriter.writer.FileWriter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
+import static org.mockito.Mockito.when;
+import static scot.carricksoftware.grantswriter.GenerateCertificateRandomValues.GetRandomString;
+
+@ExtendWith(MockitoExtension.class)
+class PersonSectionContentsWriterOnyContentsTest {
+
+    private PersonSectionContentsWriter writer;
+
+    @Mock
+    private PersonTextService personTextServiceMock;
+
+    @Mock
+    private FileWriter fileWriterMock;
+
+    private List<PersonText> contents;
+
+    private PersonText personText;
+
+    private Person person;
+
+    @BeforeEach
+    void setUp() {
+        writer = new PersonSectionContentsWriterImpl(personTextServiceMock, fileWriterMock);
+        person = new Person();
+        personText = new PersonText();
+    }
+
+    @Test
+    void withAnEmptyArrayFileWriterIsNotCalled() {
+        contents = new ArrayList<>();
+        when(personTextServiceMock.findAllByPerson(person)).thenReturn(contents);
+        writer.write(person);
+        verifyNoInteractions(fileWriterMock);
+    }
+
+    @Test
+    void withANonEmptyArrayFileWriterIsCalled() {
+        contents = new ArrayList<>();
+        String content = GetRandomString();
+        personText.setContent(content);
+        contents.add(personText);
+        when(personTextServiceMock.findAllByPerson(person)).thenReturn(contents);
+        writer.write(person);
+        verify(fileWriterMock).writeLine(content);
+    }
+}

+ 0 - 36
src/test/java/scot/carricksoftware/grantswriter/writer/latex/parts/people/subsections/PersonSectionContentsWriterTest.java

@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
- *
- */
-
-package scot.carricksoftware.grantswriter.writer.latex.parts.people.subsections;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
-import scot.carricksoftware.grantswriter.services.text.PersonTextService;
-import scot.carricksoftware.grantswriter.writer.FileWriter;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-
-class PersonSectionContentsWriterTest {
-
-    private PersonSectionContentsWriter writer;
-
-    @Mock
-    private PersonTextService personTextServiceMock;
-
-    @Mock
-    private FileWriter fileWriterMock;
-
-    @BeforeEach
-    void setUp() {
-        writer = new PersonSectionContentsWriterImpl(personTextServiceMock, fileWriterMock);
-    }
-
-    @Test
-    void constructorTest() {
-        assertNotNull(writer);
-    }
-}