refactor: Update AFTN message parsing logic

This commit is contained in:
windyboy
2024-07-20 22:21:12 +08:00
parent 6f69a56168
commit 2b83d9b785
8 changed files with 190 additions and 796 deletions
+75
View File
@@ -1,6 +1,8 @@
package parsers
import (
"caatsm/internal/domain"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
@@ -121,4 +123,77 @@ NNNN
`))
})
})
Describe("ParseBody", func() {
Context("with ARR body", func() {
parser := DefaultBodyParser()
It("should parse the body (ARR-AB123-SSR1234-KJFK-KLAX) correctly", func() {
body := "(ARR-AB123-SSR1234-KJFK-KLAX)"
parsedBody, err := parser.Parse(body)
Expect(err).ToNot(HaveOccurred())
Expect(parsedBody).ToNot(BeNil())
Expect(parsedBody).To(BeAssignableToTypeOf(&domain.ARR{}))
arrMessage := parsedBody.(*domain.ARR)
Expect(arrMessage.Category).To(Equal("ARR"))
Expect(arrMessage.AircraftID).To(Equal("AB123"))
Expect(arrMessage.SSRModeAndCode).To(Equal("SSR1234"))
Expect(arrMessage.DepartureAirport).To(Equal("KJFK"))
Expect(arrMessage.ArrivalAirport).To(Equal("KLAX"))
})
})
Context("with DEP body", func() {
parser := DefaultBodyParser()
It("should parse the body (DEP-AB123-SSR1234-KJFK-1500-KLAX) correctly", func() {
body := "(DEP-AB123-SSR1234-KJFK-1500-KLAX)"
parsedBody, err := parser.Parse(body)
Expect(err).ToNot(HaveOccurred())
Expect(parsedBody).ToNot(BeNil())
Expect(parsedBody).To(BeAssignableToTypeOf(&domain.DEP{}))
depMessage := parsedBody.(*domain.DEP)
Expect(depMessage.Category).To(Equal("DEP"))
Expect(depMessage.AircraftID).To(Equal("AB123"))
Expect(depMessage.SSRModeAndCode).To(Equal("SSR1234"))
Expect(depMessage.DepartureAirport).To(Equal("KJFK"))
Expect(depMessage.DepartureTime).To(Equal("1500"))
Expect(depMessage.Destination).To(Equal("KLAX"))
})
})
Context("with FPL body", func() {
parser := DefaultBodyParser()
It("should parse the body correctly", func() {
body := `(FPL-CCA1532-IS
-A332/H
-SDE3FGHIJ4J5M1RWY/LB101
-ZSSS2035
-K0859S1040 PIAKS G330 PIMOL A539 BTO W82 DOGAR
-ZBAA0153 ZBYN
-PBN/A1B2B3B4B5D1L1 NAV/ABAS REG/B6513 EET/ZBPE0112 SEL/KMAL PER/C RIF/FRT N640 ZBYN RMK/TCAS EQUIPPED)`
parsedBody, err := parser.Parse(body)
Expect(err).ToNot(HaveOccurred())
Expect(parsedBody).ToNot(BeNil())
Expect(parsedBody).To(BeAssignableToTypeOf(&domain.FPL{}))
fplMessage := parsedBody.(*domain.FPL)
Expect(fplMessage.FlightNumber).To(Equal("CCA1532"))
Expect(fplMessage.FlightRulesAndType).To(Equal("IS"))
Expect(fplMessage.AircraftID).To(Equal("A332/H"))
Expect(fplMessage.SSRModeAndCode).To(Equal("SDE3FGHIJ4J5M1RWY/LB101"))
Expect(fplMessage.DepartureAirport).To(Equal("ZSSS"))
Expect(fplMessage.DepartureTime).To(Equal("2035"))
Expect(fplMessage.CruisingSpeedAndLevel).To(Equal("K0859S1040"))
Expect(fplMessage.Route).To(Equal("PIAKS G330 PIMOL A539 BTO W82 DOGAR"))
Expect(fplMessage.DestinationAndTotalTime).To(Equal("ZBAA0153"))
Expect(fplMessage.AlternateAirport).To(Equal("ZBYN"))
Expect(fplMessage.OtherInfo).To(Equal("PBN/A1B2B3B4B5D1L1 NAV/ABAS REG/B6513 EET/ZBPE0112 SEL/KMAL PER/C RIF/FRT N640 ZBYN"))
Expect(fplMessage.SupplementaryInfo).To(Equal("RMK/TCAS EQUIPPED"))
Expect(fplMessage.PBN).To(Equal("PBN/A1B2B3B4B5D1L1"))
Expect(fplMessage.EstimatedElapsedTime).To(Equal("ZBPE0112"))
Expect(fplMessage.SELCALCode).To(Equal("KMAL"))
Expect(fplMessage.PerformanceCategory).To(Equal("C"))
Expect(fplMessage.RerouteInformation).To(Equal("FRT N640 ZBYN"))
Expect(fplMessage.Remarks).To(Equal("TCAS EQUIPPED"))
})
})
})
})