--- /dev/null
+package helpers
+
+import (
+       "testing"
+)
+
+func TestStripHTML(t *testing.T) {
+       type test struct {
+               input, expected string
+       }
+       data := []test{
+               {"<h1>strip h1 tag <h1>", "strip h1 tag "},
+               {"<p> strip p tag </p>", " strip p tag \n"},
+               {"</br> strip br<br>", " strip br\n"},
+       }
+       for i, d := range data {
+               output := StripHTML(d.input)
+               if d.expected != output {
+                       t.Errorf("Test %d failed. Expected %q got %q", i, d.expected, output)
+               }
+       }
+}
 
 package helpers
 
 import (
+       "strings"
        "testing"
 )
 
-func TestStripHTML(t *testing.T) {
+func TestInStringArrayCaseSensitive(t *testing.T) {
        type test struct {
-               input, expected string
+               input    string
+               expected bool
+       }
+       array := []string{
+               "Albert",
+               "Joe",
+               "Francis",
        }
        data := []test{
-               {"<h1>strip h1 tag <h1>", "strip h1 tag "},
-               {"<p> strip p tag </p>", " strip p tag \n"},
-               {"</br> strip br<br>", " strip br\n"},
-       }
-       for i, d := range data {
-               output := StripHTML(d.input)
-               if d.expected != output {
-                       t.Errorf("Test %d failed. Expected %q got %q", i, d.expected, output)
+               {"Albert", true},
+               {"ALBERT", false},
+       }
+       for _, in := range data {
+               output := InStringArray(array, in.input)
+               if output != in.expected {
+                       t.Errorf("TestInStringArrayCase failed. Expected %t. Got %t.", in.expected, output)
+               }
+       }
+}
+
+func TestSliceToLowerStable(t *testing.T) {
+       input := []string{
+               "New York",
+               "BARCELONA",
+               "COffEE",
+               "FLOWer",
+               "CanDY",
+       }
+
+       output := SliceToLower(input)
+
+       for i, e := range output {
+               if e != strings.ToLower(input[i]) {
+                       t.Errorf("Expected %s. Found %s.", strings.ToLower(input[i]), e)
+               }
+       }
+}
+
+func TestSliceToLowerNil(t *testing.T) {
+       var input []string
+
+       output := SliceToLower(input)
+
+       if output != nil {
+               t.Errorf("Expected nil to be returned. Had %s.", output)
+       }
+}
+
+func TestSliceToLowerNonDestructive(t *testing.T) {
+       input := []string{
+               "New York",
+               "BARCELONA",
+               "COffEE",
+               "FLOWer",
+               "CanDY",
+       }
+
+       // This assignment actually copies the content
+       // of input into a new object.
+       // Otherwise, the test would not make sense...
+       input_copy := input
+
+       SliceToLower(input)
+
+       for i, e := range input {
+               if e != input_copy[i] {
+                       t.Errorf("TestSliceToLowerNonDestructive failed. Expected element #%d of input slice to be %s. Found %s.", i, input_copy[i], input[i])
                }
        }
 }
+
+// Just make sure there is no error for empty-like strings
+func TestMd5StringEmpty(t *testing.T) {
+       inputs := []string{"", " ", "   "}
+
+       for _, in := range inputs {
+               Md5String(in)
+       }
+}