Repository: sunpy/sunpy-soar

Issue:
Returned search results are not ordered by observation time
### Describe the bug

When searching the SOAR, the results are not ordered by observation time. I think most users would expect them returned in increasing order of observation time.

### To Reproduce

```python
q = Fido.search(
    attrs.Time('2022-10-24 19:00', '2022-10-24 19:00:30'),
    attrs.soar.Product('EUI-HRIEUV174-IMAGE'),
    attrs.Level(2),
)
```

gives

```
Results from 1 Provider:

6 Results from the SOARClient:

Instrument     Data product    Level        Start time       ...                         Filename                        Filesize           SOOP Name           
                                                             ...                                                          Mbyte                                 
---------- ------------------- ----- ----------------------- ... ------------------------------------------------------- -------- ------------------------------
       EUI EUI-HRIEUV174-IMAGE    L2 2022-10-24 19:00:20.171 ... solo_L2_eui-hrieuv174-image_20221024T190020171_V01.fits    5.694 R_SMALL_MRES_MCAD_AR-Long-Term
       EUI EUI-HRIEUV174-IMAGE    L2 2022-10-24 19:00:00.171 ... solo_L2_eui-hrieuv174-image_20221024T190000171_V01.fits    5.682 R_SMALL_MRES_MCAD_AR-Long-Term
       EUI EUI-HRIEUV174-IMAGE    L2 2022-10-24 19:00:05.171 ... solo_L2_eui-hrieuv174-image_20221024T190005171_V01.fits    5.665 R_SMALL_MRES_MCAD_AR-Long-Term
       EUI EUI-HRIEUV174-IMAGE    L2 2022-10-24 19:00:10.171 ... solo_L2_eui-hrieuv174-image_20221024T190010171_V01.fits    5.702 R_SMALL_MRES_MCAD_AR-Long-Term
       EUI EUI-HRIEUV174-IMAGE    L2 2022-10-24 19:00:15.170 ... solo_L2_eui-hrieuv174-image_20221024T190015170_V01.fits    5.702 R_SMALL_MRES_MCAD_AR-Long-Term
       EUI EUI-HRIEUV174-IMAGE    L2 2022-10-24 19:00:25.171 ... solo_L2_eui-hrieuv174-image_20221024T190025171_V01.fits    5.659 R_SMALL_MRES_MCAD_AR-Long-Term
```

### Screenshots

_No response_

### System Details

_No response_

### Installation method

_No response_

Discussion:

Patch:
diff --git a/changelog/96.feature.rst b/changelog/96.feature.rst
new file mode 100644
index 0000000..39b5454
--- /dev/null
+++ b/changelog/96.feature.rst
@@ -0,0 +1,1 @@
+Now query returns time sorted table of results.
diff --git a/sunpy_soar/client.py b/sunpy_soar/client.py
index 8756610..8c06f4e 100644
--- a/sunpy_soar/client.py
+++ b/sunpy_soar/client.py
@@ -95,7 +95,7 @@ class SOARClient(BaseClient):
             info["begin_time"] = parse_time(info["begin_time"]).iso
             info["end_time"] = parse_time(info["end_time"]).iso
 
-        return astropy.table.QTable(
+        result_table = astropy.table.QTable(
             {
                 "Instrument": info["instrument"],
                 "Data product": info["descriptor"],
@@ -108,6 +108,8 @@ class SOARClient(BaseClient):
                 "SOOP Name": info["soop_name"],
             },
         )
+        result_table.sort("Start time")
+        return result_table
 
     def fetch(self, query_results, *, path, downloader, **kwargs):
         """


Test patch:
diff --git a/sunpy_soar/tests/test_sunpy_soar.py b/sunpy_soar/tests/test_sunpy_soar.py
index b18df58..c84afa7 100644
--- a/sunpy_soar/tests/test_sunpy_soar.py
+++ b/sunpy_soar/tests/test_sunpy_soar.py
@@ -19,7 +19,7 @@ def test_search():
     res = Fido.search(instrument, time, level, product)
     assert len(res) == 1
     assert len(res[0]) == 37
-    assert u.allclose(res[0, 0]["Filesize"], 3.47 * u.Mbyte)
+    assert u.allclose(res[0, 0]["Filesize"], 3.45 * u.Mbyte)
 
     # check passing upper case descriptor
     product = a.soar.Product("EUI-FSI174-IMAGE")
@@ -29,7 +29,9 @@ def test_search():
     files = Fido.fetch(res[0, 0])
     assert len(files) == 1
     fname = files[0]
+
     assert u.allclose(Path(fname).stat().st_size * u.byte, res[0, 0]["Filesize"], atol=1e-3 * u.Mbyte)
+
     # Smoke test that we can read this into a map
     sunpy.map.Map(fname)