From 944bba96a0bc8f0cf2bdf142ea2b82756c684c89 Mon Sep 17 00:00:00 2001
From: Eugen Ciur <eugen@papermerge.com>
Date: Thu, 3 Feb 2022 09:45:14 +0200
Subject: [PATCH] fix 'intersect' method + add couple of tests

---
 app/utils/rectangle.js       | 20 +++++++++++++++++++-
 tests/unit/rectangle-test.js | 30 ++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/app/utils/rectangle.js b/app/utils/rectangle.js
index e017485..dc789f1 100644
--- a/app/utils/rectangle.js
+++ b/app/utils/rectangle.js
@@ -17,7 +17,8 @@ export default class Rectangle {
 
   intersect(rect) {
     /*
-    Returns true if this rectangle intersects with rect.
+    Returns true if this rectangle intersects with rect
+    (or other way around).
     Two rectangle intersect if one of them has a point inside other.
     */
     if (this.contains_point(rect.p1)) {
@@ -36,6 +37,23 @@ export default class Rectangle {
       return true;
     }
 
+    // or other way around
+    if (rect.contains_point(this.p1)) {
+      return true;
+    }
+
+    if (rect.contains_point(this.p2)) {
+      return true;
+    }
+
+    if (rect.contains_point(this.p3)) {
+      return true;
+    }
+
+    if (rect.contains_point(this.p4)) {
+      return true;
+    }
+
     return false;
   }
 
diff --git a/tests/unit/rectangle-test.js b/tests/unit/rectangle-test.js
index c6ccd2c..798432f 100644
--- a/tests/unit/rectangle-test.js
+++ b/tests/unit/rectangle-test.js
@@ -53,5 +53,35 @@ module('Unit | Rectangle', function () {
       rect.p4.isEqual(new Point(100, 205))
     );
   });
+
+  test('instersect positive', function(assert) {
+    let rect1, rect2;
+
+    rect1 = new Rectangle(100, 100, 20, 20);
+    rect2 = new Rectangle(110, 90, 5, 25);
+
+    assert.true(
+      rect1.intersect(rect2)
+    );
+
+    assert.true(
+      rect2.intersect(rect1)
+    );
+  });
+
+  test('instersect negative', function(assert) {
+    let rect1, rect2;
+
+    rect1 = new Rectangle(100, 100, 20, 20);
+    rect2 = new Rectangle(10, 10, 15, 15);
+
+    assert.false(
+      rect1.intersect(rect2)
+    );
+
+    assert.false(
+      rect2.intersect(rect1)
+    );
+  });
 });
 
-- 
GitLab