From b5eb326f5f33c868ad0df9f34e126a7bedf021d6 Mon Sep 17 00:00:00 2001
From: Mate Balajti <mate.balajti@unibas.ch>
Date: Mon, 14 Aug 2023 08:54:13 +0000
Subject: [PATCH] feat: add additional tests

---
 .DS_Store                                     | Bin 0 -> 6148 bytes
 primingsitepredictor/.idea/.gitignore         |   8 +
 .../inspectionProfiles/profiles_settings.xml  |   6 +
 primingsitepredictor/.idea/misc.xml           |   4 +
 primingsitepredictor/.idea/modules.xml        |   8 +
 .../.idea/primingsitepredictor.iml            |   8 +
 primingsitepredictor/.idea/vcs.xml            |   6 +
 primingsitepredictor/Primer1.fasta            |   4 +-
 primingsitepredictor/cli.py                   |  39 ++---
 primingsitepredictor/createprimer.py          |   7 +-
 primingsitepredictor/main.py                  |  12 +-
 primingsitepredictor/my_primer.fasta          |   2 +
 .../output_transcripts_df.GTF                 |  33 ++++
 .../output_transcripts_df.txt                 |  36 +++-
 primingsitepredictor/postprocessing.py        |  11 +-
 .../test/RIBlast output example.txt           |  37 +++++
 primingsitepredictor/test/__init__.py         |   0
 .../test/output_transcripts_df.GTF            |  33 ++++
 .../test/output_transcripts_df.txt            |  33 ++++
 primingsitepredictor/test/primer1.fasta       |   2 +
 primingsitepredictor/test/test_cli.py         | 103 ++++++++++++
 .../test/test_createprimer.py                 |  71 ++++++++
 primingsitepredictor/test/test_fasta.fasta    |   2 +
 primingsitepredictor/test/test_main.py        |  93 +++++++++++
 .../test/test_postprocessing.py               | 157 ++++++++++++++++++
 primingsitepredictor/test_fasta.fasta         |   2 +
 26 files changed, 676 insertions(+), 41 deletions(-)
 create mode 100644 .DS_Store
 create mode 100644 primingsitepredictor/.idea/.gitignore
 create mode 100644 primingsitepredictor/.idea/inspectionProfiles/profiles_settings.xml
 create mode 100644 primingsitepredictor/.idea/misc.xml
 create mode 100644 primingsitepredictor/.idea/modules.xml
 create mode 100644 primingsitepredictor/.idea/primingsitepredictor.iml
 create mode 100644 primingsitepredictor/.idea/vcs.xml
 create mode 100644 primingsitepredictor/my_primer.fasta
 create mode 100644 primingsitepredictor/output_transcripts_df.GTF
 create mode 100644 primingsitepredictor/test/RIBlast output example.txt
 create mode 100644 primingsitepredictor/test/__init__.py
 create mode 100644 primingsitepredictor/test/output_transcripts_df.GTF
 create mode 100644 primingsitepredictor/test/output_transcripts_df.txt
 create mode 100644 primingsitepredictor/test/primer1.fasta
 create mode 100644 primingsitepredictor/test/test_cli.py
 create mode 100644 primingsitepredictor/test/test_createprimer.py
 create mode 100644 primingsitepredictor/test/test_fasta.fasta
 create mode 100644 primingsitepredictor/test/test_main.py
 create mode 100644 primingsitepredictor/test/test_postprocessing.py
 create mode 100644 primingsitepredictor/test_fasta.fasta

diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
GIT binary patch
literal 6148
zcmZQzU|@7AO)+F(5MW?n;9!8z45|!R0Z1N%F(jFgL>QrFAPJ2!M?+vV1V%$(Gz3ON
zU^D~<VF)ln+{D2Rp-0Kl5Eu=C(GY-#0H}OW0QD6Z7#JL&bOVG2Nii@oFo3%Nj0_Ac
zFio(203!nfNGnJUNGpg2X=PvpvA|}4wK6b5wK9UcAq)(R;4TS>25V<v1ltVagS9g-
zf^BACV1#IAV1(Mt2<@RTf_gL{^C8+97{Ru~TsKOOhQMeDz(Rl-!Vmz}|E>%SxcdJP
zRior+2#kinunYl47MEZbCs3t{!+W4QHvuXKVuPw;Mo^s$(F3lEVT}ML$bg~*R5_@+
b2Uo?6kTwK}57Iu`5P${HC_Nei0}uiLNUI8I

literal 0
HcmV?d00001

diff --git a/primingsitepredictor/.idea/.gitignore b/primingsitepredictor/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/primingsitepredictor/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/primingsitepredictor/.idea/inspectionProfiles/profiles_settings.xml b/primingsitepredictor/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/primingsitepredictor/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>
\ No newline at end of file
diff --git a/primingsitepredictor/.idea/misc.xml b/primingsitepredictor/.idea/misc.xml
new file mode 100644
index 0000000..e6a7aa4
--- /dev/null
+++ b/primingsitepredictor/.idea/misc.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (tests)" project-jdk-type="Python SDK" />
+</project>
\ No newline at end of file
diff --git a/primingsitepredictor/.idea/modules.xml b/primingsitepredictor/.idea/modules.xml
new file mode 100644
index 0000000..b7f52b9
--- /dev/null
+++ b/primingsitepredictor/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/primingsitepredictor.iml" filepath="$PROJECT_DIR$/.idea/primingsitepredictor.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/primingsitepredictor/.idea/primingsitepredictor.iml b/primingsitepredictor/.idea/primingsitepredictor.iml
new file mode 100644
index 0000000..d0876a7
--- /dev/null
+++ b/primingsitepredictor/.idea/primingsitepredictor.iml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/primingsitepredictor/.idea/vcs.xml b/primingsitepredictor/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/primingsitepredictor/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/primingsitepredictor/Primer1.fasta b/primingsitepredictor/Primer1.fasta
index 545f110..251777b 100644
--- a/primingsitepredictor/Primer1.fasta
+++ b/primingsitepredictor/Primer1.fasta
@@ -1,2 +1,2 @@
-<primer1
-TTTTTTTTTTTTTTT
+<primer1
+TTTTTTTTTTTTTTT
diff --git a/primingsitepredictor/cli.py b/primingsitepredictor/cli.py
index 5b66596..218fbb6 100644
--- a/primingsitepredictor/cli.py
+++ b/primingsitepredictor/cli.py
@@ -1,35 +1,36 @@
 # -*- coding: utf-8 -*-
 """
-Created on Mon Nov 14 14:49:50 2022
+Changed on Fr Dec 23 16:49:50 2022
 
-@author: baerma
+@author: RobinC
 """
 import argparse
 import logging
 import main
 
-def create_parser():
-    """This function creates the parser"""
-    parser = argparse.ArgumentParser(
-    prog = 'Priming site predictor',
-    description = 'Takes a cutoff energy and the predicts location of priming sites of transcripts',
-    epilog = 'To predict or not to predict')
-    parser.add_argument('energycutoff', type=float, help='a float as energy Cutoff')
-    #parser.add_argument('transcripts', help='fastafile containing transcripts') #What type is that? fasta? Actually doesn't make sense here
-    args = parser.parse_args()
-    energy_cutoff = args.energycutoff
-    return energy_cutoff
-#possibly make a class out of this although I think it's an overkill
+class CLI():
+    def create_parser(self):
+        """This function creates the parser"""
 
-def letsgo():
-    energy_cutoff = create_parser()
-    print(f"Your energy cutoff is {energy_cutoff}")
+        parser = argparse.ArgumentParser(
+            prog = 'PrimingSitePredictor',
+            description = 'Takes a cutoff energy and the predicts location of priming sites of transcripts',
+            epilog = 'To predict or not to predict')
+        parser.add_argument('--float', type=float, required=True, help='A energy-cutoff float number')
+        parsed_args = parser.parse_args()
+        energy_cutoff = parsed_args.float
+        return energy_cutoff
+
+    def letsgo(self):
+        """This function creates a parser and prints the energycutoff"""
+        energy_cutoff = CLI.create_parser()
+        print(f"Your energy cutoff is {energy_cutoff}")
 
 if __name__ == '__main__':
     logging.basicConfig(
         format='[%(asctime)s: %(levelname)s] %(message)s (module "%(module)s")',
         level=logging.INFO,
-    )
+        )
     LOG = logging.getLogger(__name__)
     main()
-    #here we would point to the main module and parse the energy cutoff
+
diff --git a/primingsitepredictor/createprimer.py b/primingsitepredictor/createprimer.py
index c2c234f..8dcd232 100644
--- a/primingsitepredictor/createprimer.py
+++ b/primingsitepredictor/createprimer.py
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 """
-Created on Wed Nov 16 14:17:06 2022
+Changed on Fr Dec 23 14:34:20 2022
 
-@author: baerma
+@author: RobinC
 """
 
 class CreatePrimer:
@@ -13,8 +13,7 @@ class CreatePrimer:
         self.primer_length = primerlength
         self.primer_sequence = 'T'*self.primer_length
         self.lines = [f'<{self.name}', self.primer_sequence]
-        #print(self.primer)
-        #return self.primer
+
     
     def create_fasta(self):
         with open(f'{self.name}.fasta', 'w') as f:
diff --git a/primingsitepredictor/main.py b/primingsitepredictor/main.py
index 07348dd..d8d80b1 100644
--- a/primingsitepredictor/main.py
+++ b/primingsitepredictor/main.py
@@ -1,10 +1,16 @@
+"""
+Changed on Tue Dec 20 14:06:20 2022
+
+@author: RobinC
+"""
 import sys
 from createprimer import CreatePrimer
 from postprocessing import PostProcessRIBlast
 
+
 def main():
     generate_RIBlast_input()
-    create_gtf()
+
         
 
 def generate_RIBlast_input():
@@ -20,9 +26,5 @@ def create_gtf():
     gtf_file = PostProcessRIBlast().output
     print(gtf_file)
 
-
-
-main()
-
 if __name__ == '__main__':
     main()
diff --git a/primingsitepredictor/my_primer.fasta b/primingsitepredictor/my_primer.fasta
new file mode 100644
index 0000000..70ef81c
--- /dev/null
+++ b/primingsitepredictor/my_primer.fasta
@@ -0,0 +1,2 @@
+<my_primer
+TTTTTTTTTTTTTTTTTTTT
diff --git a/primingsitepredictor/output_transcripts_df.GTF b/primingsitepredictor/output_transcripts_df.GTF
new file mode 100644
index 0000000..89ba6f3
--- /dev/null
+++ b/primingsitepredictor/output_transcripts_df.GTF
@@ -0,0 +1,33 @@
+Transcript_1	RIBlast	Priming_site	2974	2988	.	+	.	Interaction_Energy "0.01341899394212988"
+Transcript_1	RIBlast	Priming_site	4	18	.	+	.	Interaction_Energy "0.029617468622161858"
+Transcript_1	RIBlast	Priming_site	3	17	.	+	.	Interaction_Energy "0.033652793432239245"
+Transcript_1	RIBlast	Priming_site	2	16	.	+	.	Interaction_Energy "0.0436763978338453"
+Transcript_1	RIBlast	Priming_site	1	15	.	+	.	Interaction_Energy "0.07361927731913716"
+Transcript_1	RIBlast	Priming_site	0	14	.	+	.	Interaction_Energy "0.07913386517826602"
+Transcript_2	RIBlast	Priming_site	1270	1284	.	+	.	Interaction_Energy "0.023871738821072214"
+Transcript_2	RIBlast	Priming_site	1269	1283	.	+	.	Interaction_Energy "0.021998205780680843"
+Transcript_2	RIBlast	Priming_site	1268	1282	.	+	.	Interaction_Energy "0.02017380792576395"
+Transcript_2	RIBlast	Priming_site	1267	1281	.	+	.	Interaction_Energy "0.018400390375292373"
+Transcript_2	RIBlast	Priming_site	1266	1280	.	+	.	Interaction_Energy "0.016661952134191884"
+Transcript_2	RIBlast	Priming_site	1265	1279	.	+	.	Interaction_Energy "0.015028790572682043"
+Transcript_2	RIBlast	Priming_site	1264	1278	.	+	.	Interaction_Energy "0.013507972357530618"
+Transcript_2	RIBlast	Priming_site	1263	1277	.	+	.	Interaction_Energy "0.012121303370956734"
+Transcript_2	RIBlast	Priming_site	1262	1276	.	+	.	Interaction_Energy "0.0108940605154748"
+Transcript_2	RIBlast	Priming_site	1261	1275	.	+	.	Interaction_Energy "0.009818208415333858"
+Transcript_2	RIBlast	Priming_site	1260	1274	.	+	.	Interaction_Energy "0.008876574189642966"
+Transcript_2	RIBlast	Priming_site	1259	1273	.	+	.	Interaction_Energy "0.00807212607564225"
+Transcript_2	RIBlast	Priming_site	1258	1272	.	+	.	Interaction_Energy "0.007386053280385996"
+Transcript_2	RIBlast	Priming_site	1257	1271	.	+	.	Interaction_Energy "0.006777457533826199"
+Transcript_2	RIBlast	Priming_site	1256	1270	.	+	.	Interaction_Energy "0.006231339626935633"
+Transcript_2	RIBlast	Priming_site	1255	1269	.	+	.	Interaction_Energy "0.005701431631106869"
+Transcript_2	RIBlast	Priming_site	1254	1268	.	+	.	Interaction_Energy "0.005221962850186007"
+Transcript_2	RIBlast	Priming_site	1253	1267	.	+	.	Interaction_Energy "0.004743243630707861"
+Transcript_2	RIBlast	Priming_site	1252	1266	.	+	.	Interaction_Energy "0.0043514767009977685"
+Transcript_2	RIBlast	Priming_site	1251	1265	.	+	.	Interaction_Energy "0.004001246269203596"
+Transcript_2	RIBlast	Priming_site	1250	1264	.	+	.	Interaction_Energy "0.0035602658910861193"
+Transcript_2	RIBlast	Priming_site	1249	1263	.	+	.	Interaction_Energy "0.0034681706680775195"
+Transcript_2	RIBlast	Priming_site	1248	1262	.	+	.	Interaction_Energy "0.003588271464203091"
+Transcript_2	RIBlast	Priming_site	1247	1261	.	+	.	Interaction_Energy "0.0037963420302257692"
+Transcript_2	RIBlast	Priming_site	1246	1260	.	+	.	Interaction_Energy "0.004081499678888505"
+Transcript_2	RIBlast	Priming_site	1245	1259	.	+	.	Interaction_Energy "0.004411927146940477"
+Transcript_2	RIBlast	Priming_site	1244	1258	.	+	.	Interaction_Energy "0.00480978620121743"
diff --git a/primingsitepredictor/output_transcripts_df.txt b/primingsitepredictor/output_transcripts_df.txt
index bb43f20..89ba6f3 100644
--- a/primingsitepredictor/output_transcripts_df.txt
+++ b/primingsitepredictor/output_transcripts_df.txt
@@ -1,3 +1,33 @@
-Transcript_1	RIBlast	Priming_site	2974	2988	.	+	.	Accessibility_Energy "0.08051396365277928"
-Transcript_1	RIBlast	Priming_site	4	18	.	+	.	Accessibility_Energy "0.17770481173297115"
-Transcript_2	RIBlast	Priming_site	1270	1284	.	+	.	Accessibility_Energy "0.6445369481689498"
+Transcript_1	RIBlast	Priming_site	2974	2988	.	+	.	Interaction_Energy "0.01341899394212988"
+Transcript_1	RIBlast	Priming_site	4	18	.	+	.	Interaction_Energy "0.029617468622161858"
+Transcript_1	RIBlast	Priming_site	3	17	.	+	.	Interaction_Energy "0.033652793432239245"
+Transcript_1	RIBlast	Priming_site	2	16	.	+	.	Interaction_Energy "0.0436763978338453"
+Transcript_1	RIBlast	Priming_site	1	15	.	+	.	Interaction_Energy "0.07361927731913716"
+Transcript_1	RIBlast	Priming_site	0	14	.	+	.	Interaction_Energy "0.07913386517826602"
+Transcript_2	RIBlast	Priming_site	1270	1284	.	+	.	Interaction_Energy "0.023871738821072214"
+Transcript_2	RIBlast	Priming_site	1269	1283	.	+	.	Interaction_Energy "0.021998205780680843"
+Transcript_2	RIBlast	Priming_site	1268	1282	.	+	.	Interaction_Energy "0.02017380792576395"
+Transcript_2	RIBlast	Priming_site	1267	1281	.	+	.	Interaction_Energy "0.018400390375292373"
+Transcript_2	RIBlast	Priming_site	1266	1280	.	+	.	Interaction_Energy "0.016661952134191884"
+Transcript_2	RIBlast	Priming_site	1265	1279	.	+	.	Interaction_Energy "0.015028790572682043"
+Transcript_2	RIBlast	Priming_site	1264	1278	.	+	.	Interaction_Energy "0.013507972357530618"
+Transcript_2	RIBlast	Priming_site	1263	1277	.	+	.	Interaction_Energy "0.012121303370956734"
+Transcript_2	RIBlast	Priming_site	1262	1276	.	+	.	Interaction_Energy "0.0108940605154748"
+Transcript_2	RIBlast	Priming_site	1261	1275	.	+	.	Interaction_Energy "0.009818208415333858"
+Transcript_2	RIBlast	Priming_site	1260	1274	.	+	.	Interaction_Energy "0.008876574189642966"
+Transcript_2	RIBlast	Priming_site	1259	1273	.	+	.	Interaction_Energy "0.00807212607564225"
+Transcript_2	RIBlast	Priming_site	1258	1272	.	+	.	Interaction_Energy "0.007386053280385996"
+Transcript_2	RIBlast	Priming_site	1257	1271	.	+	.	Interaction_Energy "0.006777457533826199"
+Transcript_2	RIBlast	Priming_site	1256	1270	.	+	.	Interaction_Energy "0.006231339626935633"
+Transcript_2	RIBlast	Priming_site	1255	1269	.	+	.	Interaction_Energy "0.005701431631106869"
+Transcript_2	RIBlast	Priming_site	1254	1268	.	+	.	Interaction_Energy "0.005221962850186007"
+Transcript_2	RIBlast	Priming_site	1253	1267	.	+	.	Interaction_Energy "0.004743243630707861"
+Transcript_2	RIBlast	Priming_site	1252	1266	.	+	.	Interaction_Energy "0.0043514767009977685"
+Transcript_2	RIBlast	Priming_site	1251	1265	.	+	.	Interaction_Energy "0.004001246269203596"
+Transcript_2	RIBlast	Priming_site	1250	1264	.	+	.	Interaction_Energy "0.0035602658910861193"
+Transcript_2	RIBlast	Priming_site	1249	1263	.	+	.	Interaction_Energy "0.0034681706680775195"
+Transcript_2	RIBlast	Priming_site	1248	1262	.	+	.	Interaction_Energy "0.003588271464203091"
+Transcript_2	RIBlast	Priming_site	1247	1261	.	+	.	Interaction_Energy "0.0037963420302257692"
+Transcript_2	RIBlast	Priming_site	1246	1260	.	+	.	Interaction_Energy "0.004081499678888505"
+Transcript_2	RIBlast	Priming_site	1245	1259	.	+	.	Interaction_Energy "0.004411927146940477"
+Transcript_2	RIBlast	Priming_site	1244	1258	.	+	.	Interaction_Energy "0.00480978620121743"
diff --git a/primingsitepredictor/postprocessing.py b/primingsitepredictor/postprocessing.py
index 125950e..e2504e0 100644
--- a/primingsitepredictor/postprocessing.py
+++ b/primingsitepredictor/postprocessing.py
@@ -60,15 +60,10 @@ class PostProcessRIBlast():
 
         for index in self.interaction_df.index:
             self.output = self.output + str(self.interaction_df[3][index]+'\t' + 'RIBlast' + '\t' + 'Priming_site' + '\t' + self.interaction_df[13][index] + '\t' + self.interaction_df[12][index] + '\t' + '.' + '\t' + '+' + '\t' + '.' + '\t' + f'Interaction_Energy "{self.interaction_df["Normalised_interaction_energy"][index]}"' + '\n')
-<<<<<<< HEAD
         
-        with open('output_transcripts_df.txt', 'w') as f:
+        with open('output_transcripts_df.GTF', 'w') as f:
             f.write(self.output)
-            
+            return(self.output)
         
-=======
 
-        return(self.output)
->>>>>>> 9d8e928323a99c5e86557c4b53ab93aaf8f5beb5
-        
-#print(PostProcessRIBlast().output)
\ No newline at end of file
+print(PostProcessRIBlast().output)
\ No newline at end of file
diff --git a/primingsitepredictor/test/RIBlast output example.txt b/primingsitepredictor/test/RIBlast output example.txt
new file mode 100644
index 0000000..f3a2708
--- /dev/null
+++ b/primingsitepredictor/test/RIBlast output example.txt	
@@ -0,0 +1,37 @@
+RIblast ris result
+input:queryRNA.fa,database:test_db,RepeatFlag:0,MaximalSpan:70,MinAccessibleLength:5,MaxSeedLength:20,InteractionEnergyThreshold:-4,HybridEnergyThreshold:-6,FinalThreshold:-8,DropOutLengthWoGap:5,DropOutLengthWGap:16
+Id,Query name, Query Length, Target name, Target Length, Accessibility Energy, Hybridization Energy, Interaction Energy, BasePair
+0,Test_Primer,15,Transcript_1,3233,1.49191,-9.76,-8.26809,(0-14:2988-2974) 
+1,Test_Primer,15,Transcript_1,3233,1.02308,-9.76,-8.73692,(0-14:18-4) 
+2,Test_Primer,15,Transcript_1,3233,0.947439,-9.73,-8.78256,(0-14:17-3) 
+3,Test_Primer,15,Transcript_1,3233,0.793049,-9.73,-8.93695,(0-14:16-2) 
+4,Test_Primer,15,Transcript_1,3233,0.483869,-9.73,-9.24613,(0-14:15-1) 
+5,Test_Primer,15,Transcript_1,3233,0.441093,-9.17,-8.72891,(0-14:14-0) 
+6,Test_Primer,15,Transcript_2,1285,0.260102,-9.1,-8.8399,(0-14:1284-1270) 
+7,Test_Primer,15,Transcript_2,1285,0.308504,-9.73,-9.4215,(0-14:1283-1269) 
+8,Test_Primer,15,Transcript_2,1285,0.359773,-9.73,-9.37023,(0-14:1282-1268) 
+9,Test_Primer,15,Transcript_2,1285,0.414262,-9.73,-9.31574,(0-14:1281-1267) 
+10,Test_Primer,15,Transcript_2,1285,0.473033,-9.73,-9.25697,(0-14:1280-1266) 
+11,Test_Primer,15,Transcript_2,1285,0.534123,-9.73,-9.19588,(0-14:1279-1265) 
+12,Test_Primer,15,Transcript_2,1285,0.597302,-9.73,-9.1327,(0-14:1278-1264) 
+13,Test_Primer,15,Transcript_2,1285,0.661445,-9.73,-9.06855,(0-14:1277-1263) 
+14,Test_Primer,15,Transcript_2,1285,0.724659,-9.73,-9.00534,(0-14:1276-1262) 
+15,Test_Primer,15,Transcript_2,1285,0.786234,-9.73,-8.94377,(0-14:1275-1261) 
+16,Test_Primer,15,Transcript_2,1285,0.84594,-9.73,-8.88406,(0-14:1274-1260) 
+17,Test_Primer,15,Transcript_2,1285,0.902197,-9.73,-8.8278,(0-14:1273-1259) 
+18,Test_Primer,15,Transcript_2,1285,0.954797,-9.73,-8.7752,(0-14:1272-1258) 
+19,Test_Primer,15,Transcript_2,1285,1.00572,-9.73,-8.72428,(0-14:1271-1257) 
+20,Test_Primer,15,Transcript_2,1285,1.05547,-9.73,-8.67453,(0-14:1270-1256) 
+21,Test_Primer,15,Transcript_2,1285,1.1081,-9.73,-8.6219,(0-14:1269-1255) 
+22,Test_Primer,15,Transcript_2,1285,1.16012,-9.73,-8.56988,(0-14:1268-1254) 
+23,Test_Primer,15,Transcript_2,1285,1.21706,-9.73,-8.51294,(0-14:1267-1253) 
+24,Test_Primer,15,Transcript_2,1285,1.26811,-9.73,-8.46189,(0-14:1266-1252) 
+25,Test_Primer,15,Transcript_2,1285,1.3178,-9.73,-8.4122,(0-14:1265-1251) 
+26,Test_Primer,15,Transcript_2,1285,1.38695,-9.73,-8.34305,(0-14:1264-1250) 
+27,Test_Primer,15,Transcript_2,1285,1.40247,-9.73,-8.32753,(0-14:1263-1249) 
+28,Test_Primer,15,Transcript_2,1285,1.38231,-9.73,-8.34769,(0-14:1262-1248) 
+29,Test_Primer,15,Transcript_2,1285,1.34893,-9.73,-8.38107,(0-14:1261-1247) 
+30,Test_Primer,15,Transcript_2,1285,1.30604,-9.73,-8.42396,(0-14:1260-1246) 
+31,Test_Primer,15,Transcript_2,1285,1.25994,-9.73,-8.47006,(0-14:1259-1245) 
+32,Test_Primer,15,Transcript_2,1285,1.20881,-9.76,-8.55119,(0-14:1258-1244) 
+33,Test_Primer,15,Transcript_2,1285,1.63873,-9.91,-8.27127,(0-14:674-660) 
diff --git a/primingsitepredictor/test/__init__.py b/primingsitepredictor/test/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/primingsitepredictor/test/output_transcripts_df.GTF b/primingsitepredictor/test/output_transcripts_df.GTF
new file mode 100644
index 0000000..89ba6f3
--- /dev/null
+++ b/primingsitepredictor/test/output_transcripts_df.GTF
@@ -0,0 +1,33 @@
+Transcript_1	RIBlast	Priming_site	2974	2988	.	+	.	Interaction_Energy "0.01341899394212988"
+Transcript_1	RIBlast	Priming_site	4	18	.	+	.	Interaction_Energy "0.029617468622161858"
+Transcript_1	RIBlast	Priming_site	3	17	.	+	.	Interaction_Energy "0.033652793432239245"
+Transcript_1	RIBlast	Priming_site	2	16	.	+	.	Interaction_Energy "0.0436763978338453"
+Transcript_1	RIBlast	Priming_site	1	15	.	+	.	Interaction_Energy "0.07361927731913716"
+Transcript_1	RIBlast	Priming_site	0	14	.	+	.	Interaction_Energy "0.07913386517826602"
+Transcript_2	RIBlast	Priming_site	1270	1284	.	+	.	Interaction_Energy "0.023871738821072214"
+Transcript_2	RIBlast	Priming_site	1269	1283	.	+	.	Interaction_Energy "0.021998205780680843"
+Transcript_2	RIBlast	Priming_site	1268	1282	.	+	.	Interaction_Energy "0.02017380792576395"
+Transcript_2	RIBlast	Priming_site	1267	1281	.	+	.	Interaction_Energy "0.018400390375292373"
+Transcript_2	RIBlast	Priming_site	1266	1280	.	+	.	Interaction_Energy "0.016661952134191884"
+Transcript_2	RIBlast	Priming_site	1265	1279	.	+	.	Interaction_Energy "0.015028790572682043"
+Transcript_2	RIBlast	Priming_site	1264	1278	.	+	.	Interaction_Energy "0.013507972357530618"
+Transcript_2	RIBlast	Priming_site	1263	1277	.	+	.	Interaction_Energy "0.012121303370956734"
+Transcript_2	RIBlast	Priming_site	1262	1276	.	+	.	Interaction_Energy "0.0108940605154748"
+Transcript_2	RIBlast	Priming_site	1261	1275	.	+	.	Interaction_Energy "0.009818208415333858"
+Transcript_2	RIBlast	Priming_site	1260	1274	.	+	.	Interaction_Energy "0.008876574189642966"
+Transcript_2	RIBlast	Priming_site	1259	1273	.	+	.	Interaction_Energy "0.00807212607564225"
+Transcript_2	RIBlast	Priming_site	1258	1272	.	+	.	Interaction_Energy "0.007386053280385996"
+Transcript_2	RIBlast	Priming_site	1257	1271	.	+	.	Interaction_Energy "0.006777457533826199"
+Transcript_2	RIBlast	Priming_site	1256	1270	.	+	.	Interaction_Energy "0.006231339626935633"
+Transcript_2	RIBlast	Priming_site	1255	1269	.	+	.	Interaction_Energy "0.005701431631106869"
+Transcript_2	RIBlast	Priming_site	1254	1268	.	+	.	Interaction_Energy "0.005221962850186007"
+Transcript_2	RIBlast	Priming_site	1253	1267	.	+	.	Interaction_Energy "0.004743243630707861"
+Transcript_2	RIBlast	Priming_site	1252	1266	.	+	.	Interaction_Energy "0.0043514767009977685"
+Transcript_2	RIBlast	Priming_site	1251	1265	.	+	.	Interaction_Energy "0.004001246269203596"
+Transcript_2	RIBlast	Priming_site	1250	1264	.	+	.	Interaction_Energy "0.0035602658910861193"
+Transcript_2	RIBlast	Priming_site	1249	1263	.	+	.	Interaction_Energy "0.0034681706680775195"
+Transcript_2	RIBlast	Priming_site	1248	1262	.	+	.	Interaction_Energy "0.003588271464203091"
+Transcript_2	RIBlast	Priming_site	1247	1261	.	+	.	Interaction_Energy "0.0037963420302257692"
+Transcript_2	RIBlast	Priming_site	1246	1260	.	+	.	Interaction_Energy "0.004081499678888505"
+Transcript_2	RIBlast	Priming_site	1245	1259	.	+	.	Interaction_Energy "0.004411927146940477"
+Transcript_2	RIBlast	Priming_site	1244	1258	.	+	.	Interaction_Energy "0.00480978620121743"
diff --git a/primingsitepredictor/test/output_transcripts_df.txt b/primingsitepredictor/test/output_transcripts_df.txt
new file mode 100644
index 0000000..89ba6f3
--- /dev/null
+++ b/primingsitepredictor/test/output_transcripts_df.txt
@@ -0,0 +1,33 @@
+Transcript_1	RIBlast	Priming_site	2974	2988	.	+	.	Interaction_Energy "0.01341899394212988"
+Transcript_1	RIBlast	Priming_site	4	18	.	+	.	Interaction_Energy "0.029617468622161858"
+Transcript_1	RIBlast	Priming_site	3	17	.	+	.	Interaction_Energy "0.033652793432239245"
+Transcript_1	RIBlast	Priming_site	2	16	.	+	.	Interaction_Energy "0.0436763978338453"
+Transcript_1	RIBlast	Priming_site	1	15	.	+	.	Interaction_Energy "0.07361927731913716"
+Transcript_1	RIBlast	Priming_site	0	14	.	+	.	Interaction_Energy "0.07913386517826602"
+Transcript_2	RIBlast	Priming_site	1270	1284	.	+	.	Interaction_Energy "0.023871738821072214"
+Transcript_2	RIBlast	Priming_site	1269	1283	.	+	.	Interaction_Energy "0.021998205780680843"
+Transcript_2	RIBlast	Priming_site	1268	1282	.	+	.	Interaction_Energy "0.02017380792576395"
+Transcript_2	RIBlast	Priming_site	1267	1281	.	+	.	Interaction_Energy "0.018400390375292373"
+Transcript_2	RIBlast	Priming_site	1266	1280	.	+	.	Interaction_Energy "0.016661952134191884"
+Transcript_2	RIBlast	Priming_site	1265	1279	.	+	.	Interaction_Energy "0.015028790572682043"
+Transcript_2	RIBlast	Priming_site	1264	1278	.	+	.	Interaction_Energy "0.013507972357530618"
+Transcript_2	RIBlast	Priming_site	1263	1277	.	+	.	Interaction_Energy "0.012121303370956734"
+Transcript_2	RIBlast	Priming_site	1262	1276	.	+	.	Interaction_Energy "0.0108940605154748"
+Transcript_2	RIBlast	Priming_site	1261	1275	.	+	.	Interaction_Energy "0.009818208415333858"
+Transcript_2	RIBlast	Priming_site	1260	1274	.	+	.	Interaction_Energy "0.008876574189642966"
+Transcript_2	RIBlast	Priming_site	1259	1273	.	+	.	Interaction_Energy "0.00807212607564225"
+Transcript_2	RIBlast	Priming_site	1258	1272	.	+	.	Interaction_Energy "0.007386053280385996"
+Transcript_2	RIBlast	Priming_site	1257	1271	.	+	.	Interaction_Energy "0.006777457533826199"
+Transcript_2	RIBlast	Priming_site	1256	1270	.	+	.	Interaction_Energy "0.006231339626935633"
+Transcript_2	RIBlast	Priming_site	1255	1269	.	+	.	Interaction_Energy "0.005701431631106869"
+Transcript_2	RIBlast	Priming_site	1254	1268	.	+	.	Interaction_Energy "0.005221962850186007"
+Transcript_2	RIBlast	Priming_site	1253	1267	.	+	.	Interaction_Energy "0.004743243630707861"
+Transcript_2	RIBlast	Priming_site	1252	1266	.	+	.	Interaction_Energy "0.0043514767009977685"
+Transcript_2	RIBlast	Priming_site	1251	1265	.	+	.	Interaction_Energy "0.004001246269203596"
+Transcript_2	RIBlast	Priming_site	1250	1264	.	+	.	Interaction_Energy "0.0035602658910861193"
+Transcript_2	RIBlast	Priming_site	1249	1263	.	+	.	Interaction_Energy "0.0034681706680775195"
+Transcript_2	RIBlast	Priming_site	1248	1262	.	+	.	Interaction_Energy "0.003588271464203091"
+Transcript_2	RIBlast	Priming_site	1247	1261	.	+	.	Interaction_Energy "0.0037963420302257692"
+Transcript_2	RIBlast	Priming_site	1246	1260	.	+	.	Interaction_Energy "0.004081499678888505"
+Transcript_2	RIBlast	Priming_site	1245	1259	.	+	.	Interaction_Energy "0.004411927146940477"
+Transcript_2	RIBlast	Priming_site	1244	1258	.	+	.	Interaction_Energy "0.00480978620121743"
diff --git a/primingsitepredictor/test/primer1.fasta b/primingsitepredictor/test/primer1.fasta
new file mode 100644
index 0000000..251777b
--- /dev/null
+++ b/primingsitepredictor/test/primer1.fasta
@@ -0,0 +1,2 @@
+<primer1
+TTTTTTTTTTTTTTT
diff --git a/primingsitepredictor/test/test_cli.py b/primingsitepredictor/test/test_cli.py
new file mode 100644
index 0000000..dec66a1
--- /dev/null
+++ b/primingsitepredictor/test/test_cli.py
@@ -0,0 +1,103 @@
+"""
+Created on Tue Dec 20 14:06:20 2022
+
+@author: RobinC
+"""
+
+# Imports
+import os, sys
+import pytest
+currentdir = os.path.dirname(os.path.realpath(__file__))
+parentdir = os.path.dirname(currentdir)
+sys.path.append(parentdir)
+import createprimer as cp
+import unittest
+import cli
+import argparse
+import pytest
+from unittest.mock import patch
+from unittest.mock import Mock
+import io
+import sys
+
+class TestCli(unittest.TestCase):
+
+    def test_import(self):
+        """Test function for module imports"""
+        try:
+            import argparse
+        except ImportError:
+            self.fail("Failed to import argparse")
+
+        try:
+            import logging
+        except ImportError:
+            self.fail("Failed to import logging")
+
+        try:
+            import main
+        except ImportError:
+            self.fail("Failed to import main")
+
+
+
+    def test_create_parser(self):
+
+        # Test parsing a float number
+        float_num = 3.14
+        float_str = str(float_num)
+        self.assertEqual(float_num, cli.CLI.create_parser(['--float', float_str]))
+
+        # Test parsing a float number with leading and trailing whitespace
+        float_num = 3.14
+        float_str = "  " + str(float_num) + "  "
+        self.assertEqual(float_num, cli.CLI.create_parser(['--float', float_str]))
+
+        # Test parsing a float number with a decimal point and no digits after it
+        float_num = 3.
+        float_str = str(float_num)
+        self.assertEqual(float_num, cli.CLI.create_parser(['--float', float_str]))
+
+        # Test parsing a float number with a decimal point and multiple digits after it
+        float_num = 3.14159
+        float_str = str(float_num)
+        self.assertEqual(float_num, cli.CLI.create_parser(['--float', float_str]))
+
+        # Test parsing a negative float number
+        float_num = -3.14
+        float_str = str(float_num)
+        self.assertEqual(float_num, cli.CLI.create_parser(['--float', float_str]))
+
+    def test_invalid_create_parser(self):
+
+        # Test parsing a float number with a letter in it
+        args = ['--float', '3.14a']
+        with self.assertRaises(SystemExit):
+            cli.CLI.create_parser(args)
+
+        # Test parsing a float number with multiple decimal points
+        args = ['--float', '3.14.159']
+        with self.assertRaises(SystemExit):
+            cli.CLI.create_parser(args)
+
+    def test_letsgo(self):
+
+        # Test printing a float number
+        float_num = 3.14
+        float_str = str(float_num)
+        with self.assertLogs('', level='INFO') as cm:
+            cli.CLI.letsgo(['--float', float_str])
+        self.assertEqual(cm.output, [f'INFO:root:Your energy cutoff is {float_num}'])
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/primingsitepredictor/test/test_createprimer.py b/primingsitepredictor/test/test_createprimer.py
new file mode 100644
index 0000000..a54ad9c
--- /dev/null
+++ b/primingsitepredictor/test/test_createprimer.py
@@ -0,0 +1,71 @@
+"""
+Created on Tue Dec 20 14:06:20 2022
+
+@author: RobinC
+"""
+
+import os, sys
+import pytest
+currentdir = os.path.dirname(os.path.realpath(__file__))
+parentdir = os.path.dirname(currentdir)
+sys.path.append(parentdir)
+import createprimer as cp
+import unittest
+
+
+class TestCreatePrimer(unittest.TestCase):
+
+    def test_init(self):
+        """Test function for the  __init__() method"""
+
+        # Test default values
+        primer = cp.CreatePrimer()
+        self.assertEqual(primer.name, 'primer1')
+        self.assertEqual(primer.primer_length, 15)
+        self.assertEqual(primer.primer_sequence, 'T'*15)
+        self.assertEqual(primer.lines, ['<primer1', 'TTTTTTTTTTTTTTT'])
+
+        # Test custom values
+        primer = cp.CreatePrimer('my_primer', 20)
+        self.assertEqual(primer.name, 'my_primer')
+        self.assertEqual(primer.primer_length, 20)
+        self.assertEqual(primer.primer_sequence, 'T'*20)
+        self.assertEqual(primer.lines, ['<my_primer', 'TTTTTTTTTTTTTTTTTTTT'])
+
+
+    def test_create_fasta(self):
+        """Test function for the  test_create_fasta() method"""
+
+        # Test default values
+        primer = cp.CreatePrimer()
+        primer.create_fasta()
+        with open('primer1.fasta', 'r') as f:
+            lines = f.readlines()
+        self.assertEqual(lines, ['<primer1\n', 'TTTTTTTTTTTTTTT\n'])
+
+        # Test custom values
+        primer = cp.CreatePrimer('my_primer', 20)
+        primer.create_fasta()
+        with open('my_primer.fasta', 'r') as f:
+            lines = f.readlines()
+        self.assertEqual(lines, ['<my_primer\n', 'TTTTTTTTTTTTTTTTTTTT\n'])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/primingsitepredictor/test/test_fasta.fasta b/primingsitepredictor/test/test_fasta.fasta
new file mode 100644
index 0000000..5b85943
--- /dev/null
+++ b/primingsitepredictor/test/test_fasta.fasta
@@ -0,0 +1,2 @@
+ATGC
+CAGT
diff --git a/primingsitepredictor/test/test_main.py b/primingsitepredictor/test/test_main.py
new file mode 100644
index 0000000..1ac3d3c
--- /dev/null
+++ b/primingsitepredictor/test/test_main.py
@@ -0,0 +1,93 @@
+"""
+Created on Tue Dec 20 14:06:20 2022
+
+@author: RobinC
+"""
+
+# Imports
+import os, sys
+currentdir = os.path.dirname(os.path.realpath(__file__))
+parentdir = os.path.dirname(currentdir)
+sys.path.append(parentdir)
+import unittest
+import main as mn
+import createprimer as cp
+import postprocessing as pp
+from io import StringIO
+
+class TestMain(unittest.TestCase):
+
+    def test_import(self):
+        """Test function for module imports"""
+        try:
+            import CreatePrimer
+        except ImportError:
+            self.fail("Failed to import CreatePrimer")
+
+        try:
+            import PostProcessRIBlast
+        except ImportError:
+            self.fail("Failed to import PostProcessRIBlast")
+
+    def test_generate_RIBlast_input(self):
+        """Test funciton for the method generate_RIBlast_input()"""
+
+        # Call the CreatePrimer() method and the create_fasta() method
+        primer = cp.CreatePrimer()
+        primer.create_fasta()
+
+        # get the name and the transcript filename
+        primer_filename = primer.name+".fasta"
+        transcript_filename = "transcripts.fasta"
+
+        # Call the generate_RIBlast_input() method
+        result = mn.generate_RIBlast_input()
+
+        assert result == [primer_filename, transcript_filename]
+
+
+    def test_create_gtf(self):
+        """Test funciton for the method create_gtf()"""
+
+        # Call the output of the PostprocessRIBlast() method
+        result = pp.PostProcessRIBlast().output
+
+        # Open the expected output
+        with open('output_transcripts_df.txt', 'r') as f:
+            expected_output = f.read()
+
+        # Use an assertion to check the output result
+        assert result == expected_output
+
+        # Capture the output of the print statement
+        captured_output = StringIO()
+        sys.stdout = captured_output
+
+        # Call the function that contains the print statement
+        mn.create_gtf()
+
+        # Check the captured output against the expected value
+        assert captured_output.getvalue().strip() == expected_output
+
+
+    def test_main(self):
+        """Test function for the method main()"""
+
+        # Call the CreatePrimer() method and the create_fasta() method
+        primer = cp.CreatePrimer()
+        primer.create_fasta()
+
+        # get the name and the transcript filename
+        primer_filename = primer.name+".fasta"
+        transcripts_filename = "transcripts.fasta"
+
+        # Get the results for the called methods
+        result1 = mn.generate_RIBlast_input()
+        result2 = mn.create_gtf()
+
+        # Open the expected output
+        with open('output_transcripts_df.txt', 'r') as f:
+            expected_output = f.read()
+
+        assert result1 == [primer_filename, transcripts_filename]
+        assert result2 == expected_output
diff --git a/primingsitepredictor/test/test_postprocessing.py b/primingsitepredictor/test/test_postprocessing.py
new file mode 100644
index 0000000..2948ef2
--- /dev/null
+++ b/primingsitepredictor/test/test_postprocessing.py
@@ -0,0 +1,157 @@
+"""
+Created on Tue Dec 20 14:06:20 2022
+
+@author: RobinC
+"""
+
+# Imports
+import os, sys
+import pytest
+
+currentdir = os.path.dirname(os.path.realpath(__file__))
+parentdir = os.path.dirname(currentdir)
+sys.path.append(parentdir)
+import postprocessing as pp
+import unittest
+import math
+from unittest import mock
+
+
+class TestPostProcessRIBlast(unittest.TestCase):
+    def test_import(self):
+        """Test function for module imports"""
+        try:
+            import pandas
+        except ImportError:
+            self.fail("Failed to import pandas")
+
+        try:
+            import math
+        except ImportError:
+            self.fail("Failed to import math")
+
+    def setUp(self):
+        """Setup function to create an instance of PostProcessRIBlast()"""
+
+        self.post_processor = pp.PostProcessRIBlast()
+
+    def test_init(self):
+        """Test function for the __init__() method"""
+
+        # Test if generate_gtf method is being called
+        with unittest.mock.patch.object(
+            pp.PostProcessRIBlast, "generate_gtf"
+        ) as mock_generate_gtf:
+            pp.PostProcessRIBlast()
+            mock_generate_gtf.assert_called_once()
+
+        # Test if generate_gtf returns the expected output
+        expected_output = (
+            'Transcript_1\tRIBlast\tPriming_site\t2974[3257 chars]3"\n'
+        )
+        self.assertEqual(self.post_processor.generate_gtf(), expected_output)
+
+    def test_calculate_energy(self):
+        """Test function for the calculate_energy() method"""
+
+        def calculate_energy(value):
+            energy_constant = 1.380649*10**(-23)*298
+            kcalmol_joul = 6.9477*10**-21
+            return (math.exp(-float(value)*kcalmol_joul/energy_constant))
+
+        # set a decimal place
+        decimalPlace = 20
+
+        # Test for a positive value
+        self.testinstance = pp.PostProcessRIBlast.calculate_energy(self, 5.0)
+        expected_output = calculate_energy(5.0)
+        self.assertAlmostEqual(self.testinstance, expected_output, decimalPlace)
+
+
+        # Test for a negative value
+        self.testinstance = pp.PostProcessRIBlast.calculate_energy(self, -5.0)
+        expected_output = calculate_energy(-5.0)
+        self.assertAlmostEqual(self.testinstance, expected_output, decimalPlace)
+
+        # Test for zero
+        self.testinstance = pp.PostProcessRIBlast.calculate_energy(self, 0)
+        expected_output = calculate_energy(0)
+        self.assertAlmostEqual(self.testinstance, expected_output, decimalPlace)
+
+
+    def test_create_list_from_output(self):
+        """Test function for the create_list_from_output() method"""
+
+        #create an instance test of the class PostProcessRIBlast()
+        test = pp.PostProcessRIBlast()
+        test.file = "RIBlast output example.txt"
+
+        with open('RIBlast output example.txt', 'r') as file:
+            data_list = file.readlines()
+
+        # Remove the header
+        data_list = data_list[3:]
+
+        # Convert each row of the list into a list of values
+        expected_output = []
+        for row in data_list:
+            # Split the row by the comma character
+            values = row.strip().split(',')
+            # Append the list of values to the final list
+            expected_output.append(values)
+        return expected_output
+        self.assertEqual(test.create_list_from_output(), expected_output)
+
+
+    def test_create_pandas_df(self):
+        """Test function for the create_pandas_df() method with mock data"""
+
+        # create a test instance
+        test_instance = pp.PostProcessRIBlast()
+
+        # create some mock data for the input list
+        test_instance.interaction_list= [
+                                ['Id','Query name', 'Query Length', 'Target name', 'Target Length', 'Accessibility Energy', 'Hybridization Energy', 'Interaction Energy', 'BasePair'],
+                                [0,'Test_Primer',15,'Transcript_1',3233,1.49191,-9.76,-8.26809,'(0-14:2988-2974)'],
+                                [1,'Test_Primer',15,'Transcript_1',3233,1.02308,-9.76,-8.73692,'(0-14:18-4)'],
+                                [2,'Test_Primer',15,'Transcript_1',3233,0.947439,-9.73,-8.78256,'(0-14:17-3)'],
+                                [3,'Test_Primer',15,'Transcript_1',3233,0.793049,-9.73,-8.93695,'(0-14:16-2)'],
+                                [4,'Test_Primer',15,'Transcript_1',3233,0.483869,-9.73,-9.24613,'(0-14:15-1)'],
+                                [5,'Test_Primer',15,'Transcript_1',3233,0.441093,-9.17,-8.72891,'(0-14:14-0)']]
+
+        # create the DataFrame using the mock data
+        df = test_instance.create_pandas_df()
+
+        #self.assertEqual(len(df),7)
+
+        # check that the DataFrame has the expected column names
+        #self.assertEqual(list(df.columns), ['Id','Query name', 'Query Length', 'Target name', 'Target Length', 'Accessibility Energy', 'Hybridization Energy', 'Interaction Energy', 'BasePair'])
+
+        # check that the values in the 'Id' column are correct
+        self.assertEqual(list(df['Id']), ['Id',0,1,2,3,4,5])
+
+        # check that the values in the 'Query name' column are correct
+        self.assertEqual(list(df['Query name']), ['Query name','Test_Primer','Test_Primer','Test_Primer','Test_Primer','Test_Primer','Test_Primer'])
+
+        # check that the values in the 'Query Length' column are correct
+        self.assertEqual(list(df['Query Length']), ['Query Length',15, 15, 15, 15, 15, 15])
+
+        # check that the values in the 'Target name' column are correct
+        self.assertEqual(list(df['Target name']), ['Target name','Transcript_1','Transcript_1','Transcript_1','Transcript_1','Transcript_1','Transcript_1'])
+
+        # check that the values in the 'Target Length' column are correct
+        self.assertEqual(list(df['Target Length']), ['Target Length', 3233, 3233, 3233, 3233, 3233, 3233])
+
+        # check that the values in the 'Accessibility Energy' column are correct
+        self.assertEqual(list(df['Accessibility Energy']), ['Accessibility Energy',1.49191, 1.02308, 0.947439, 0.793049, 0.483869, 0.441093])
+
+        # check that the values in the 'Hybridization Energy' column are correct
+        self.assertEqual(list(df['Hybridization Energy']), ['Hybridization Energy',-9.76, -9.76, -9.73, -9.73, -9.73, -9.17])
+
+        # check that the values in the 'Interaction Energy' column are correct
+        self.assertEqual(list(df['Interaction Energy']), ['Interaction Energy',-8.26809, -8.73692, -8.78256, -8.93695, -9.24613, -8.72891])
+
+        # check that the values in the 'BasePair' column are correct
+        self.assertEqual(list(df['BasePair']), ['BasePair','(0-14:2988-2974)', '(0-14:18-4)', '(0-14:17-3)', '(0-14:16-2)', '(0-14:15-1)', '(0-14:14-0)'])
+
+
diff --git a/primingsitepredictor/test_fasta.fasta b/primingsitepredictor/test_fasta.fasta
new file mode 100644
index 0000000..5b85943
--- /dev/null
+++ b/primingsitepredictor/test_fasta.fasta
@@ -0,0 +1,2 @@
+ATGC
+CAGT
-- 
GitLab