001package com.ganteater.ae.processor;
002
003import static org.junit.Assert.*;
004
005import java.io.File;
006import java.nio.charset.StandardCharsets;
007import java.util.Base64;
008
009import org.junit.Test;
010
011import com.ganteater.ae.util.xml.easyparser.Node;
012
013public class CoderTest {
014
015        private static class TestableCoder extends Coder {
016                private final java.util.Map<String, Object> vars = new java.util.HashMap<String, Object>();
017
018                @Override
019                public Object getVariableValue(String name) {
020                        return vars.get(name);
021                }
022
023                @Override
024                public void setVariableValue(String name, Object value) {
025                        vars.put(name, value);
026                }
027
028                @Override
029                public String replaceProperties(String value) {
030                        return value;
031                }
032
033                @Override
034                public File getBaseDir() {
035                        return new File(".");
036                }
037        }
038
039        @Test
040        public void runCommandBase64Encode_shouldEncodeFromSourceVariableString() throws Exception {
041                // Arrange
042                TestableCoder coder = new TestableCoder();
043                coder.setVariableValue("SRC", "hello");
044                Node action = new Node("Base64Encode");
045                action.setAttribute("name", "OUT");
046                action.setAttribute("source", "SRC");
047
048                // Act
049                coder.runCommandBase64Encode(action);
050
051                // Assert
052                String expected = Base64.getEncoder().encodeToString("hello".getBytes("UTF-8"));
053                assertEquals(expected, coder.getVariableValue("OUT"));
054        }
055
056        @Test
057        public void runCommandBase64Encode_shouldEncodeFromSourceVariableBytes() throws Exception {
058                // Arrange
059                TestableCoder coder = new TestableCoder();
060                byte[] bytes = "hi".getBytes(StandardCharsets.UTF_8);
061                coder.setVariableValue("SRC", bytes);
062                Node action = new Node("Base64Encode");
063                action.setAttribute("name", "OUT");
064                action.setAttribute("source", "SRC");
065
066                // Act
067                coder.runCommandBase64Encode(action);
068
069                // Assert
070                String expected = Base64.getEncoder().encodeToString(bytes);
071                assertEquals(expected, coder.getVariableValue("OUT"));
072        }
073
074        @Test
075        public void runCommandBase64Encode_shouldEncodeWhenValueAttributeProvided() throws Exception {
076                // Arrange
077                TestableCoder coder = new TestableCoder();
078                Node action = new Node("Base64Encode");
079                action.setAttribute("name", "OUT");
080                action.setAttribute("value", "123");
081
082                // Act
083                coder.runCommandBase64Encode(action);
084
085                // Assert
086                String expected = Base64.getEncoder().encodeToString("123".getBytes("UTF-8"));
087                assertEquals(expected, coder.getVariableValue("OUT"));
088        }
089
090        @Test
091        public void runCommandEscapeXml_shouldEscapeXmlFromSourceVariable() {
092                // Arrange
093                TestableCoder coder = new TestableCoder();
094                coder.setVariableValue("SRC", "<a>1</a>");
095                Node action = new Node("EscapeXml");
096                action.setAttribute("name", "OUT");
097                action.setAttribute("source", "SRC");
098
099                // Act
100                coder.runCommandEscapeXml(action);
101
102                // Assert
103                assertEquals("&lt;a&gt;1&lt;/a&gt;", coder.getVariableValue("OUT"));
104        }
105
106        @Test
107        public void runCommandEscapeXml_shouldSetNullWhenSourceIsMissing() {
108                // Arrange
109                TestableCoder coder = new TestableCoder();
110                Node action = new Node("EscapeXml");
111                action.setAttribute("name", "OUT");
112                action.setAttribute("source", "MISSING");
113
114                // Act
115                coder.runCommandEscapeXml(action);
116
117                // Assert
118                assertNull(coder.getVariableValue("OUT"));
119        }
120}