diff --git a/tests/test_fetch_series_by_api_link.m b/tests/test_fetch_series_by_api_link.m
new file mode 100644
index 0000000000000000000000000000000000000000..45e58257a4528d7920c5a5d5d0ea4f8470f18cda
--- /dev/null
+++ b/tests/test_fetch_series_by_api_link.m
@@ -0,0 +1,17 @@
+function test_fetch_series_by_api_link()
+df = fetch_series_by_api_link("https://api.db.nomics.world/v22/series/BIS/long_pp?limit=1000&offset=0&q=&observations=1&align_periods=1&dimensions=%7B%7D");
+    
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==1);
+assert(provider_codes{1} == "BIS");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 1);
+assert(dataset_codes{1} == "long_pp");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+assert(length(series_codes) > 1);
+end
\ No newline at end of file
diff --git a/tests/test_fetch_series_by_code.m b/tests/test_fetch_series_by_code.m
new file mode 100644
index 0000000000000000000000000000000000000000..63865078980903ca17350f32fbd1755e30419499
--- /dev/null
+++ b/tests/test_fetch_series_by_code.m
@@ -0,0 +1,18 @@
+function test_fetch_series_by_code()
+df = fetch_series('provider_code', "AMECO", 'dataset_code', "ZUTN", 'series_code',"EA19.1.0.0.0.ZUTN");
+
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==1);
+assert(provider_codes{1} == "AMECO");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 1);
+assert(dataset_codes{1} == "ZUTN");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+assert(length(series_codes) == 1);
+assert(series_codes{1} == "EA19.1.0.0.0.ZUTN");
+end
\ No newline at end of file
diff --git a/tests/test_fetch_series_by_code_mask.m b/tests/test_fetch_series_by_code_mask.m
new file mode 100644
index 0000000000000000000000000000000000000000..f2e6b895c56a6933fcc4536635d4be96aaceb9e3
--- /dev/null
+++ b/tests/test_fetch_series_by_code_mask.m
@@ -0,0 +1,17 @@
+function test_fetch_series_by_code_mask()
+df = fetch_series('provider_code', "IMF", 'dataset_code', "CPI", 'series_code', "M.FR+DE.PCPIEC_IX+PCPIA_IX");
+
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==1);
+assert(provider_codes{1} == "IMF");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 1);
+assert(dataset_codes{1} == "CPI");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+assert(length(series_codes) == 4);
+end
\ No newline at end of file
diff --git a/tests/test_fetch_series_by_code_mask_with_plus_in_dimension_code.m b/tests/test_fetch_series_by_code_mask_with_plus_in_dimension_code.m
new file mode 100644
index 0000000000000000000000000000000000000000..757de4f2c2e49b791f48eb27160df167f5485bdf
--- /dev/null
+++ b/tests/test_fetch_series_by_code_mask_with_plus_in_dimension_code.m
@@ -0,0 +1,19 @@
+function test_fetch_series_by_code_mask_with_plus_in_dimension_code()
+df = fetch_series('provider_code', "SCB", 'dataset_code', "AKIAM", 'series_code', '"J+K"+"G+H".AM0301C1');
+
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==1);
+assert(provider_codes{1} == "SCB");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 1);
+assert(dataset_codes{1} == "AKIAM");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+check = {'J+K.AM0301C1', 'G+H.AM0301C1'}';  
+logA = cell2mat(cellfun(@(c)strcmp(c,series_codes),check,'UniformOutput',false));
+assert(sum(logA)==2);
+end
\ No newline at end of file
diff --git a/tests/test_fetch_series_by_dimension.m b/tests/test_fetch_series_by_dimension.m
new file mode 100644
index 0000000000000000000000000000000000000000..f30e8a15e8c119cac93af27c0505cd568ac148c1
--- /dev/null
+++ b/tests/test_fetch_series_by_dimension.m
@@ -0,0 +1,17 @@
+function test_fetch_series_by_dimension()
+df = fetch_series('provider_code',"WB",'dataset_code',"DB", 'dimensions', '{"country":["ES","FR","IT"],"indicator":["IC.REG.COST.PC.FE.ZS.DRFN"]}');
+
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==1);
+assert(provider_codes{1} == "WB");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 1);
+assert(dataset_codes{1} == "DB");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+assert(length(series_codes) == 3);
+end
\ No newline at end of file
diff --git a/tests/test_fetch_series_by_id.m b/tests/test_fetch_series_by_id.m
new file mode 100644
index 0000000000000000000000000000000000000000..a24eb700505071e0f0e59d1eded5709b16c45944
--- /dev/null
+++ b/tests/test_fetch_series_by_id.m
@@ -0,0 +1,18 @@
+function test_fetch_series_by_id()
+df = fetch_series('series_ids',"AMECO/ZUTN/EA19.1.0.0.0.ZUTN");
+
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==1);
+assert(provider_codes{1} == "AMECO");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 1);
+assert(dataset_codes{1} == "ZUTN");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+assert(length(series_codes) == 1);
+assert(series_codes{1} == "EA19.1.0.0.0.ZUTN");
+end
\ No newline at end of file
diff --git a/tests/test_fetch_series_by_ids_in_different_datasets.m b/tests/test_fetch_series_by_ids_in_different_datasets.m
new file mode 100644
index 0000000000000000000000000000000000000000..9bc2103aeea610e1a52277994a2a199953d5e5c0
--- /dev/null
+++ b/tests/test_fetch_series_by_ids_in_different_datasets.m
@@ -0,0 +1,21 @@
+function test_fetch_series_by_ids_in_different_datasets()
+df = fetch_series('series_ids', ["AMECO/ZUTN/EA19.1.0.0.0.ZUTN", "BIS/cbs/Q.S.5A.4B.F.B.A.A.LC1.A.1C"]);
+
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==2);
+assert(provider_codes{1} == "AMECO");
+assert(provider_codes{2} == "BIS");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 2);
+assert(dataset_codes{1} == "ZUTN");
+assert(dataset_codes{2} == "cbs");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+assert(length(series_codes) == 2);
+assert(series_codes{1} == "EA19.1.0.0.0.ZUTN");
+assert(series_codes{2} == "Q.S.5A.4B.F.B.A.A.LC1.A.1C");
+end
\ No newline at end of file
diff --git a/tests/test_fetch_series_by_ids_in_same_dataset.m b/tests/test_fetch_series_by_ids_in_same_dataset.m
new file mode 100644
index 0000000000000000000000000000000000000000..7924f0ba8e34c3f62e5aae5fc58e29856d6e6711
--- /dev/null
+++ b/tests/test_fetch_series_by_ids_in_same_dataset.m
@@ -0,0 +1,20 @@
+function test_fetch_series_by_ids_in_same_dataset()
+df = fetch_series('series_ids', ["AMECO/ZUTN/EA19.1.0.0.0.ZUTN",...
+                                 "AMECO/ZUTN/DNK.1.0.0.0.ZUTN"]);
+    
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==1);
+assert(provider_codes{1} == "AMECO");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 1);
+assert(dataset_codes{1} == "ZUTN");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+assert(length(series_codes) == 2);
+assert(series_codes{1} == "DNK.1.0.0.0.ZUTN");
+assert(series_codes{2} == "EA19.1.0.0.0.ZUTN");
+end
\ No newline at end of file
diff --git a/tests/test_fetch_series_of_dataset.m b/tests/test_fetch_series_of_dataset.m
new file mode 100644
index 0000000000000000000000000000000000000000..379852624bd61d0c7126e3ac4db2b0d51e22f91c
--- /dev/null
+++ b/tests/test_fetch_series_of_dataset.m
@@ -0,0 +1,17 @@
+function test_fetch_series_of_dataset()
+df = fetch_series('provider_code', "AMECO", 'dataset_code', "ZUTN");
+
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==1);
+assert(provider_codes{1} == "AMECO");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 1);
+assert(dataset_codes{1} == "ZUTN");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+assert(length(series_codes) > 1);
+end
\ No newline at end of file
diff --git a/tests/test_fetch_series_with_max_nb_series.m b/tests/test_fetch_series_with_max_nb_series.m
new file mode 100644
index 0000000000000000000000000000000000000000..d09c92de53f74e8e2d4e491bd7be88d69457576a
--- /dev/null
+++ b/tests/test_fetch_series_with_max_nb_series.m
@@ -0,0 +1,17 @@
+function test_fetch_series_with_max_nb_series()
+df = fetch_series('provider_code', "AMECO", 'dataset_code', "ZUTN", 'max_nb_series',20);
+
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==1);
+assert(provider_codes{1} == "AMECO");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 1);
+assert(dataset_codes{1} == "ZUTN");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+assert(length(series_codes) <= 20);
+end
\ No newline at end of file
diff --git a/tests/test_fetch_series_with_na_values.m b/tests/test_fetch_series_with_na_values.m
new file mode 100644
index 0000000000000000000000000000000000000000..7195532028e6ef1d39e8565926af3332ba0fa85e
--- /dev/null
+++ b/tests/test_fetch_series_with_na_values.m
@@ -0,0 +1,23 @@
+function test_fetch_series_with_na_values()
+df = fetch_series('provider_code', "AMECO", 'dataset_code', "ZUTN", 'series_code', "DEU.1.0.0.0.ZUTN");
+
+idx = find(strcmp('provider_code',df(1,:)));
+provider_codes = unique(df(2:end,idx));
+assert(length(provider_codes)==1);
+assert(provider_codes{1} == "AMECO");
+
+idx = find(strcmp('dataset_code',df(1,:)));
+dataset_codes = unique(df(2:end,idx));
+assert(length(dataset_codes) == 1);
+assert(dataset_codes{1} == "ZUTN");
+
+idx = find(strcmp('series_code',df(1,:)));
+series_codes = unique(df(2:end,idx));
+assert(series_codes{1} == "DEU.1.0.0.0.ZUTN");
+
+idx = find(strcmp('original_value',df(1,:)));
+assert(any(strcmp('NA', df(2:end,idx))) == true);
+
+idx = find(strcmp('value',df(1,:)));
+assert(any(isnan(cell2mat(df(2:end,idx)))) == true);
+end
\ No newline at end of file