diff --git a/src/main/java/model/ArraySquare.java b/src/main/java/model/ArraySquare.java
index 1aec71946589211c618902d90037ba06a35333f0..3f77c2b5d35461779fae65e7e63ab03a5bf7f0cd 100644
--- a/src/main/java/model/ArraySquare.java
+++ b/src/main/java/model/ArraySquare.java
@@ -52,7 +52,7 @@ public class ArraySquare implements Square {
     return true;
   }
 
-  public boolean accept(Tile tile, CardinalDirection direction) {
+  private boolean accept(Tile tile, CardinalDirection direction) {
     return getIncidentNeighboringSide(direction).accept(tile.side(direction));
   }
 
diff --git a/src/test/java/model/ArraySquareTest.java b/src/test/java/model/ArraySquareTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..51a87377317d97af99fec35dc1070083b8573e9b
--- /dev/null
+++ b/src/test/java/model/ArraySquareTest.java
@@ -0,0 +1,87 @@
+package model;
+
+import javafx.scene.paint.Color;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ArraySquareTest {
+  Square arraySquare1;
+  Square arraySquare2;
+  ColoredSide redSide;
+  ColoredSide blueSide;
+  Tile redTile;
+  Tile blueTile;
+  
+  @BeforeEach
+  void initialize(){
+    arraySquare1 = new ArraySquare();
+    arraySquare2 = new ArraySquare();
+    redTile = new UniformTile(new ColoredSide(Color.RED));
+    blueTile = new UniformTile(new ColoredSide(Color.BLUE));
+    redSide = new ColoredSide(Color.RED);
+    blueSide = new ColoredSide(Color.BLUE);
+  }
+
+  @Test
+  void testGetNeighbors_afterConstruction(){
+    for(CardinalDirection direction : CardinalDirection.values())
+      assertThat(arraySquare1.getNeighbor(direction)).isEqualTo(EmptySquare.EMPTY_SQUARE);
+  }
+
+  @Test
+  void testEmptyTile_afterConstruction(){
+    assertThat(arraySquare1.getTile()).isEqualTo(EmptyTile.EMPTY_TILE);
+  }
+
+  @Test
+  void testPut(){
+    arraySquare1.put(redTile);
+    arraySquare2.put(blueTile);
+    assertThat(arraySquare1.getTile()).isEqualTo(redTile);
+    assertThat(arraySquare2.getTile()).isEqualTo(blueTile);
+  }
+
+  @Test
+  void testGetNeighbors_afterSetNeighbor(){
+    arraySquare1.setNeighbor(arraySquare2, CardinalDirection.NORTH);
+    arraySquare2.setNeighbor(arraySquare1, CardinalDirection.SOUTH);
+    assertThat(arraySquare1.getNeighbor(CardinalDirection.NORTH)).isEqualTo(arraySquare2);
+    assertThat(arraySquare2.getNeighbor(CardinalDirection.SOUTH)).isEqualTo(arraySquare1);
+  }
+
+  @Test
+  void testCompatibleSides(){
+    arraySquare1.put(redTile);
+    arraySquare2.put(blueTile);
+    arraySquare1.setNeighbor(arraySquare2, CardinalDirection.NORTH);
+    arraySquare2.setNeighbor(arraySquare1, CardinalDirection.SOUTH);
+    List<Side> sides = List.of(blueSide, redSide);
+    assertThat(arraySquare1.compatibleSides(sides, CardinalDirection.NORTH))
+            .containsExactly(blueSide);
+    assertThat(arraySquare2.compatibleSides(sides, CardinalDirection.SOUTH))
+            .containsExactly(redSide);
+    assertThat(arraySquare1.compatibleSides(sides, CardinalDirection.SOUTH))
+            .containsExactly(blueSide, redSide);
+  }
+
+  @Test
+  void testCompatibleTiles(){
+    List<Tile> tiles = List.of(blueTile, redTile);
+    assertThat(arraySquare1.compatibleTiles(tiles))
+            .containsExactly(blueTile, redTile);
+
+    arraySquare1.put(redTile);
+    arraySquare2.put(blueTile);
+    arraySquare1.setNeighbor(arraySquare2, CardinalDirection.NORTH);
+    arraySquare2.setNeighbor(arraySquare1, CardinalDirection.SOUTH);
+
+    assertThat(arraySquare1.compatibleTiles(tiles))
+            .containsExactly(blueTile);
+    assertThat(arraySquare2.compatibleTiles(tiles))
+            .containsExactly(redTile);
+  }
+}