From 04d20d75849df5149d6e3cadcade5eedbd4f1ab3 Mon Sep 17 00:00:00 2001
From: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Date: Tue, 15 Aug 2023 22:21:04 -0400
Subject: [PATCH] Added some more tests for KissAbstract

---
 CHANGELOG.md                    |  3 ++-
 lib/kiss/kiss_abstract.rb       |  2 ++
 spec/kiss/kiss_abstract_spec.rb | 22 ++++++++++++++++++++--
 3 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index f7db49a..5b0d988 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,8 @@
 ## 2.0.0
 
 * Moved abstraction over to abstractify library.
-* Added more parsing methods so entrypoints now take strings rather than KISS encoded data.
+* Added more parsing methods so entry points now take strings rather than KISS encoded data.
+* Added errors where appropriate, for example writing invalid frames now throw an IOError.
 
 ## 1.0.3
 
diff --git a/lib/kiss/kiss_abstract.rb b/lib/kiss/kiss_abstract.rb
index fd96b61..8cbcb64 100644
--- a/lib/kiss/kiss_abstract.rb
+++ b/lib/kiss/kiss_abstract.rb
@@ -294,6 +294,8 @@ module Kiss
               encoded_frame = KissAbstract.encode_frame(frame)
               if KissAbstract.valid_frame(encoded_frame)
                 self.write_bytes(encoded_frame, *args, **kwargs)
+              else
+                raise IOError.new("frame was able to be encoded but was determined not to be valid")
               end
           end
         end
diff --git a/spec/kiss/kiss_abstract_spec.rb b/spec/kiss/kiss_abstract_spec.rb
index 305b6e3..510e9d9 100644
--- a/spec/kiss/kiss_abstract_spec.rb
+++ b/spec/kiss/kiss_abstract_spec.rb
@@ -4,7 +4,7 @@ require 'abstractify'
 ENCODED_FRAME = [192, 0, 158, 154, 142, 64, 64, 64, 96, 174, 100, 142, 154, 136, 64, 98, 174, 146, 136, 138, 98, 64, 98, 174, 146, 136, 138, 100, 64, 101, 3, 240, 116, 101, 115, 116, 95, 101, 110, 99, 111, 100, 101, 95, 102, 114, 97, 109, 101, 192]
 
 DECODED_FRAME = {
-                  :source => "W2GMD-1",
+                  :source => " W2GMD-1",
                   :destination => "OMG",
                   :payload => "test_encode_frame",
                   :path => ['WIDE1-1', 'WIDE2-2']
@@ -83,10 +83,18 @@ describe Kiss::KissAbstract do
         expect(translated_frame).to eql(DECODED_FRAME)
       end
     end
+
+    context "Given no bytes on the underlying interface" do
+      let(:kiss_mock) {KissMock.new}
+      it "successfully decoded and parsed the frame" do
+        translated_frame = kiss_mock.read
+        expect(translated_frame).to be_nil
+      end
+    end
   end
 
   describe ".write" do
-    context "Given a decoded frame" do
+    context "Given a frame as a map of strings" do
       let(:kiss_mock) {KissMock.new}
       it "successfully encodes to the underlying interface" do
         kiss_mock.write(DECODED_FRAME)
@@ -94,6 +102,16 @@ describe Kiss::KissAbstract do
         expect(all_raw_frames[0]).to eql(ENCODED_FRAME)
       end
     end
+    context "Given a frame that encodes but is invalid" do
+      let(:kiss_mock) {KissMock.new}
+      it "successfully encodes to the underlying interface" do
+        allow(Kiss::KissAbstract).to receive(:valid_frame).and_return(false)
+
+        expect {
+          kiss_mock.write(DECODED_FRAME)
+        }.to raise_error(IOError)
+      end
+    end
   end
 
 end
-- 
GitLab