Repository: freelawproject/juriscraper (language: python)

Issue:
Fill `vtsuperct` gaps
Part of #929

Between June 05, 2020 and March 31st, 2022, we have [4 documents](https://www.courtlistener.com/?q=court_id%3Avtsuperct&type=o&order_by=dateFiled%20asc&stat_Precedential=on&stat_Non-Precedential=on&filed_after=06%2F06%2F2020&filed_before=03%2F31%2F2022). We are missing ~175 [documents](https://www.vermontjudiciary.org/opinions-decisions?facet_from_date=06/05/2020&facet_to_date=03/31/2022&f%5B0%5D=document_type%3A94) from civil, criminal, family and environmental courts.

Between November 16th, 2017 and October 25th, 2019 we have [3 documents](https://www.courtlistener.com/?q=court_id%3Avtsuperct&type=o&order_by=dateFiled%20asc&stat_Precedential=on&stat_Non-Precedential=on&filed_after=11%2F17%2F2017&filed_before=10%2F25%2F2019). We are missing around [375 documents](https://www.vermontjudiciary.org/opinions-decisions?facet_from_date=11/17/2017&facet_to_date=10/25/2019) from civil, criminal, family and environmental courts. Note that these are not only opinions, but orders and decisions too. The scraper does not filter them

Between March 23, 2017 and August 18, 2017 we have [0 documents](https://www.courtlistener.com/?q=court_id%3Avtsuperct&type=o&order_by=dateFiled%20asc&stat_Precedential=on&stat_Non-Precedential=on&filed_after=03%2F24%2F2017&filed_before=08%2F17%2F2017).

Between January 17, 2020 and May 15, 2020 we have [0 documents](https://www.courtlistener.com/?q=court_id%3Avtsuperct&type=o&order_by=dateFiled%20asc&stat_Precedential=on&stat_Non-Precedential=on&filed_after=01%2F18%2F2020&filed_before=05%2F14%2F2020).


Discussion / hints:

Fix patch:
diff --git a/juriscraper/opinions/united_states/state/vt.py b/juriscraper/opinions/united_states/state/vt.py
index ba4c50b77..843d7a981 100644
--- a/juriscraper/opinions/united_states/state/vt.py
+++ b/juriscraper/opinions/united_states/state/vt.py
@@ -11,23 +11,43 @@
 She's very responsive.
 """
 
+from datetime import date, datetime
+from typing import Optional, Tuple
+from urllib.parse import urlencode
+
+from juriscraper.AbstractSite import logger
+from juriscraper.lib.date_utils import make_date_range_tuples
+from juriscraper.lib.string_utils import titlecase
 from juriscraper.OpinionSiteLinear import OpinionSiteLinear
 
 
 class Site(OpinionSiteLinear):
+    base_url = "https://www.vermontjudiciary.org/opinions-decisions"
+    days_interval = 30
+    first_opinion_date = datetime(2000, 1, 1)
+    division = 7
+
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.court_id = self.__module__
-        self.division = 7
+        if self.division == 7:
+            self.first_opinion_date = datetime(1999, 5, 26)
         self.status = "Published"
-        self.url = f"https://www.vermontjudiciary.org/opinions-decisions?f%5B0%5D=court_division_opinions_library_%3A{self.division}"  # supreme
+        self.set_url()
+        self.make_backscrape_iterable(kwargs)
+
+    def _process_html(self) -> None:
+        """Process HTML into case dictionaries
+
+        Source's page size is 25 rows
 
-    def _process_html(self):
+        :return None
+        """
         for case in self.html.xpath(".//article"):
             name_url_span = case.xpath(
                 ".//div[contains(@class, 'views-field-name')]"
             )[0]
-            date = (
+            date_filed = (
                 case.xpath(
                     ".//div[contains(@class, 'views-field-field-document-expiration')]"
                 )[0]
@@ -44,8 +64,72 @@ def _process_html(self):
             self.cases.append(
                 {
                     "url": name_url_span.xpath(".//a/@href")[0],
-                    "name": name_url_span.text_content(),
-                    "date": date,
+                    "name": titlecase(name_url_span.text_content()),
+                    "date": date_filed,
                     "docket": docket,
                 }
             )
+
+    def _download_backwards(self, dates: Tuple[date]) -> None:
+        """Make custom date range request
+        :param dates: (start_date, end_date) tuple
+        :return None
+        """
+        logger.info("Backscraping for range %s %s", *dates)
+        self.set_url(*dates)
+        self.html = self._download()
+        self._process_html()
+
+    def make_backscrape_iterable(self, kwargs: dict) -> None:
+        """Checks if backscrape start and end arguments have been passed
+        by caller, and parses them accordingly
+
+        :param kwargs: passed when initializing the scraper, may or
+            may not contain backscrape controlling arguments
+        :return None
+        """
+        start = kwargs.get("backscrape_start")
+        end = kwargs.get("backscrape_end")
+
+        if start:
+            start = datetime.strptime(start, "%m/%d/%Y")
+        else:
+            start = self.first_opinion_date
+        if end:
+            end = datetime.strptime(end, "%m/%d/%Y")
+        else:
+            end = datetime.now()
+
+        self.back_scrape_iterable = make_date_range_tuples(
+            start, end, self.days_interval
+        )
+
+    def set_url(
+        self, start: Optional[date] = None, end: Optional[date] = None
+    ) -> None:
+        """Formats and sets `self.url` with date inputs
+        If no start or end dates are given, scrape without date filter values
+
+        There is a Document Type filter available, with an 'Opinion' value, that
+        can be added to params like this:
+            {"f[1]": "document_type:94"}a
+        However, we are not using it since some documents marked as 'Decisions'
+        also contain opinions. For example:
+        https://www.vermontjudiciary.org/sites/default/files/documents/2020-10-13-57.pdf
+        titled "Opinion and Order on Cross-Motions for Summary Judgment"
+        has 8 pages, most of which are argumentation
+
+        :param start: start date
+        :param end: end date
+        :return None
+        """
+        params = {
+            "facet_from_date": "",
+            "facet_to_date": "",
+            "f[0]": f"court_division_opinions_library_:{self.division}",  # filter by court
+        }
+        if start:
+            params["facet_from_date"] = start.strftime("%m/%d/%Y")
+            params["facet_to_date"] = end.strftime("%m/%d/%Y")
+
+        self.url = f"{self.base_url}?{urlencode(params)}"
diff --git a/juriscraper/opinions/united_states/state/vt_criminal.py b/juriscraper/opinions/united_states/state/vt_criminal.py
index f9652c676..8eebb56d8 100644
--- a/juriscraper/opinions/united_states/state/vt_criminal.py
+++ b/juriscraper/opinions/united_states/state/vt_criminal.py
@@ -8,8 +8,9 @@
 
 
 class Site(vt.Site):
+    division = 2
+    days_interval = 200
+
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.court_id = self.__module__
-        self.division = 2
-        self.url = f"https://www.vermontjudiciary.org/opinions-decisions?f%5B0%5D=court_division_opinions_library_%3A{self.division}"  # supreme
diff --git a/juriscraper/opinions/united_states/state/vtsuperct_civil.py b/juriscraper/opinions/united_states/state/vtsuperct_civil.py
index 0d5c41bfe..0a57e542e 100644
--- a/juriscraper/opinions/united_states/state/vtsuperct_civil.py
+++ b/juriscraper/opinions/united_states/state/vtsuperct_civil.py
@@ -8,8 +8,9 @@
 
 
 class Site(vt.Site):
+    division = 1
+    days_interval = 100
+
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.court_id = self.__module__
-        self.division = 1
-        self.url = f"https://www.vermontjudiciary.org/opinions-decisions?f%5B0%5D=court_division_opinions_library_%3A{self.division}"  # supreme
diff --git a/juriscraper/opinions/united_states/state/vtsuperct_environmental.py b/juriscraper/opinions/united_states/state/vtsuperct_environmental.py
index bc6059a57..06288fee4 100644
--- a/juriscraper/opinions/united_states/state/vtsuperct_environmental.py
+++ b/juriscraper/opinions/united_states/state/vtsuperct_environmental.py
@@ -8,8 +8,9 @@
 
 
 class Site(vt.Site):
+    division = 3
+    days_interval = 90
+
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.court_id = self.__module__
-        self.division = 3
-        self.url = f"https://www.vermontjudiciary.org/opinions-decisions?f%5B0%5D=court_division_opinions_library_%3A{self.division}"  # supreme
diff --git a/juriscraper/opinions/united_states/state/vtsuperct_family.py b/juriscraper/opinions/united_states/state/vtsuperct_family.py
index 83dbf4dbc..cfb1685b8 100644
--- a/juriscraper/opinions/united_states/state/vtsuperct_family.py
+++ b/juriscraper/opinions/united_states/state/vtsuperct_family.py
@@ -8,8 +8,9 @@
 
 
 class Site(vt.Site):
+    division = 4
+    days_interval = 360
+
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.court_id = self.__module__
-        self.division = 4
-        self.url = f"https://www.vermontjudiciary.org/opinions-decisions?f%5B0%5D=court_division_opinions_library_%3A{self.division}"  # supreme
diff --git a/juriscraper/opinions/united_states/state/vtsuperct_probate.py b/juriscraper/opinions/united_states/state/vtsuperct_probate.py
index 205492f1a..31457b7c0 100644
--- a/juriscraper/opinions/united_states/state/vtsuperct_probate.py
+++ b/juriscraper/opinions/united_states/state/vtsuperct_probate.py
@@ -8,8 +8,9 @@
 
 
 class Site(vt.Site):
+    division = 6
+    days_interval = 200
+
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.court_id = self.__module__
-        self.division = 6
-        self.url = f"https://www.vermontjudiciary.org/opinions-decisions?f%5B0%5D=court_division_opinions_library_%3A{self.division}"  # supreme


Test patch:
diff --git a/tests/examples/opinions/united_states/vt_example.compare.json b/tests/examples/opinions/united_states/vt_example.compare.json
index fea9e9165..f375e1753 100644
--- a/tests/examples/opinions/united_states/vt_example.compare.json
+++ b/tests/examples/opinions/united_states/vt_example.compare.json
@@ -1,7 +1,7 @@
 [
   {
     "case_dates": "2023-10-27",
-    "case_names": "In re Petition of Apple Hill Solar LLC",
+    "case_names": "In Re Petition of Apple Hill Solar LLC",
     "download_urls": "/media/16536",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -61,7 +61,7 @@
   },
   {
     "case_dates": "2023-10-13",
-    "case_names": "In re K.H., K.H., K.D., Juveniles",
+    "case_names": "In Re K.H., K.H., K.D., Juveniles",
     "download_urls": "/media/16419",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -71,7 +71,7 @@
   },
   {
     "case_dates": "2023-10-13",
-    "case_names": "In re G.L., Juvenile",
+    "case_names": "In Re G.L., Juvenile",
     "download_urls": "/media/16424",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -81,7 +81,7 @@
   },
   {
     "case_dates": "2023-10-13",
-    "case_names": "In re Appeal of G.L.",
+    "case_names": "In Re Appeal of G.L.",
     "download_urls": "/media/16417",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -91,7 +91,7 @@
   },
   {
     "case_dates": "2023-10-13",
-    "case_names": "In re A.W & J.W., Juveniles",
+    "case_names": "In Re A.W & J.W., Juveniles",
     "download_urls": "/media/16425",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -101,7 +101,7 @@
   },
   {
     "case_dates": "2023-10-13",
-    "case_names": "In re A.D., Juvenile",
+    "case_names": "In Re A.D., Juvenile",
     "download_urls": "/media/16423",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -151,7 +151,7 @@
   },
   {
     "case_dates": "2023-09-29",
-    "case_names": "In re A.O. & I.O., Juveniles & In re B.G. & E.G., Juveniles",
+    "case_names": "In Re A.O. & I.O., Juveniles & in Re B.G. & E.G., Juveniles",
     "download_urls": "/media/16372",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -191,7 +191,7 @@
   },
   {
     "case_dates": "2023-09-15",
-    "case_names": "Town of Bennington v. M.V. Properties, Inc.",
+    "case_names": "Town of Bennington v. M v. Properties, Inc.",
     "download_urls": "/media/16327",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -221,7 +221,7 @@
   },
   {
     "case_dates": "2023-09-15",
-    "case_names": "Jennifer Parmelee v. Department of Labor (Bridge School, lnc.)",
+    "case_names": "Jennifer Parmelee v. Department of Labor (Bridge School, Lnc.)",
     "download_urls": "/media/16333",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -231,7 +231,7 @@
   },
   {
     "case_dates": "2023-09-15",
-    "case_names": "In re M.W., M.W., B.W., Juveniles",
+    "case_names": "In Re M.W., M.W., B.W., Juveniles",
     "download_urls": "/media/16326",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
diff --git a/tests/examples/opinions/united_states/vtsuperct_civil_example.compare.json b/tests/examples/opinions/united_states/vtsuperct_civil_example.compare.json
index 36f379551..540134e86 100644
--- a/tests/examples/opinions/united_states/vtsuperct_civil_example.compare.json
+++ b/tests/examples/opinions/united_states/vtsuperct_civil_example.compare.json
@@ -1,27 +1,27 @@
 [
   {
     "case_dates": "2023-11-03",
-    "case_names": "keenan v. dion",
+    "case_names": "Keenan v. Dion",
     "download_urls": "/media/16612",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "678-10-02 wncv",
-    "case_name_shorts": "keenan"
+    "case_name_shorts": "Keenan"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "isabelle v. craddock",
+    "case_names": "Isabelle v. Craddock",
     "download_urls": "/media/16611",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "587-10-00 wncv",
-    "case_name_shorts": "isabelle"
+    "case_name_shorts": "Isabelle"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "in re estate of wheeler",
+    "case_names": "In Re Estate of Wheeler",
     "download_urls": "/media/16610",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -31,222 +31,222 @@
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "holl v. ballard",
+    "case_names": "Holl v. Ballard",
     "download_urls": "/media/16609",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "260-6-03 wrcv",
-    "case_name_shorts": "holl"
+    "case_name_shorts": "Holl"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "hankins v. crdc",
+    "case_names": "Hankins v. Crdc",
     "download_urls": "/media/16608",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "102-2-01 wrcv",
-    "case_name_shorts": "hankins"
+    "case_name_shorts": "Hankins"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "guimond v. pinders",
+    "case_names": "Guimond v. Pinders",
     "download_urls": "/media/16607",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "400-9-01 wrcv",
-    "case_name_shorts": "guimond"
+    "case_name_shorts": "Guimond"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "goatworld v. liquor control board",
+    "case_names": "Goatworld v. Liquor Control Board",
     "download_urls": "/media/16606",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "325-6-02 wncv",
-    "case_name_shorts": "goatworld"
+    "case_name_shorts": "Goatworld"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "gallant v. jre",
+    "case_names": "Gallant v. Jre",
     "download_urls": "/media/16605",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "170-3-02 wncv",
-    "case_name_shorts": "gallant"
+    "case_name_shorts": "Gallant"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "ford v. siceley",
+    "case_names": "Ford v. Siceley",
     "download_urls": "/media/16604",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "430-7-02 wncv",
-    "case_name_shorts": "ford"
+    "case_name_shorts": "Ford"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "forauer v. benson",
+    "case_names": "Forauer v. Benson",
     "download_urls": "/media/16603",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "45-1-02 wrcv",
-    "case_name_shorts": "forauer"
+    "case_name_shorts": "Forauer"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "fletcher v. ferry",
+    "case_names": "Fletcher v. Ferry",
     "download_urls": "/media/16602",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "376-7-01 wncv",
-    "case_name_shorts": "fletcher"
+    "case_name_shorts": "Fletcher"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "fletcher v. ferry",
+    "case_names": "Fletcher v. Ferry",
     "download_urls": "/media/16601",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "376-7-01 wncv",
-    "case_name_shorts": "fletcher"
+    "case_name_shorts": "Fletcher"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "fletcher v. ferry",
+    "case_names": "Fletcher v. Ferry",
     "download_urls": "/media/16600",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "376-7-01 wncv",
-    "case_name_shorts": "fletcher"
+    "case_name_shorts": "Fletcher"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "fletcher v. ferry",
+    "case_names": "Fletcher v. Ferry",
     "download_urls": "/media/16599",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "376-7-01 wncv",
-    "case_name_shorts": "fletcher"
+    "case_name_shorts": "Fletcher"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "fletcher v. ferry",
+    "case_names": "Fletcher v. Ferry",
     "download_urls": "/media/16598",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "376-7-01 wncv",
-    "case_name_shorts": "fletcher"
+    "case_name_shorts": "Fletcher"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "dbd v. c&s",
+    "case_names": "Dbd v. C&S",
     "download_urls": "/media/16597",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "669-10-02 wncv",
-    "case_name_shorts": "dbd"
+    "case_name_shorts": "Dbd"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "daimler-chrysler v. larrabee",
+    "case_names": "Daimler-Chrysler v. Larrabee",
     "download_urls": "/media/16596",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "530-8-02 wncv",
-    "case_name_shorts": "daimler-chrysler"
+    "case_name_shorts": "Daimler-Chrysler"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "daimler-chrysler v. larrabee",
+    "case_names": "Daimler-Chrysler v. Larrabee",
     "download_urls": "/media/16595",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "530-8-02 wrcv",
-    "case_name_shorts": "daimler-chrysler"
+    "case_name_shorts": "Daimler-Chrysler"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "daimler-chrysler v. allen",
+    "case_names": "Daimler-Chrysler v. Allen",
     "download_urls": "/media/16594",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "553-11-03 wrcv",
-    "case_name_shorts": "daimler-chrysler"
+    "case_name_shorts": "Daimler-Chrysler"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "boa v. edwards",
+    "case_names": "Boa v. Edwards",
     "download_urls": "/media/16593",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "489-9-02 wrcv",
-    "case_name_shorts": "boa"
+    "case_name_shorts": "Boa"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "besser v. human rights commission",
+    "case_names": "Besser v. Human Rights Commission",
     "download_urls": "/media/16592",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "90-2-03 wncv",
-    "case_name_shorts": "besser"
+    "case_name_shorts": "Besser"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "b & m v. freund",
+    "case_names": "B & M v. Freund",
     "download_urls": "/media/16591",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "448-7-02 wncv",
-    "case_name_shorts": "freund"
+    "case_name_shorts": "Freund"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "appeal of smith",
+    "case_names": "Appeal of Smith",
     "download_urls": "/media/16590",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "114-2-03 wncv",
-    "case_name_shorts": "appeal of smith"
+    "case_name_shorts": "Appeal of Smith"
   },
   {
     "case_dates": "2023-11-03",
-    "case_names": "appeal of dasilva",
+    "case_names": "Appeal of Dasilva",
     "download_urls": "/media/16589",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "819-12-02 wncv",
-    "case_name_shorts": "appeal of dasilva"
+    "case_name_shorts": "Appeal of Dasilva"
   },
   {
     "case_dates": "2023-11-01",
-    "case_names": "rivard v. brattleboro",
+    "case_names": "Rivard v. Brattleboro",
     "download_urls": "/media/16552",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "23-cv-1280",
-    "case_name_shorts": "rivard"
+    "case_name_shorts": "Rivard"
   }
 ]
\ No newline at end of file
diff --git a/tests/examples/opinions/united_states/vtsuperct_environmental_example.compare.json b/tests/examples/opinions/united_states/vtsuperct_environmental_example.compare.json
index 1e80d470c..7b1698ef4 100644
--- a/tests/examples/opinions/united_states/vtsuperct_environmental_example.compare.json
+++ b/tests/examples/opinions/united_states/vtsuperct_environmental_example.compare.json
@@ -31,7 +31,7 @@
   },
   {
     "case_dates": "2023-09-29",
-    "case_names": "Malav, Inc. (d/b/a Fairbanks Inn) NOV Appeal - Decision on Motions",
+    "case_names": "Malav, Inc. (d/B/A Fairbanks Inn) NOV Appeal - Decision on Motions",
     "download_urls": "/media/16394",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
diff --git a/tests/examples/opinions/united_states/vtsuperct_family_example.compare.json b/tests/examples/opinions/united_states/vtsuperct_family_example.compare.json
index 0f6347439..ae3bb16a0 100644
--- a/tests/examples/opinions/united_states/vtsuperct_family_example.compare.json
+++ b/tests/examples/opinions/united_states/vtsuperct_family_example.compare.json
@@ -1,7 +1,7 @@
 [
   {
     "case_dates": "2022-01-14",
-    "case_names": "In re G.J., Juvenile",
+    "case_names": "In Re G.J., Juvenile",
     "download_urls": "/media/14247",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -21,7 +21,7 @@
   },
   {
     "case_dates": "2020-09-01",
-    "case_names": "In re Z.L., Juvenile",
+    "case_names": "In Re Z.L., Juvenile",
     "download_urls": "/media/12320",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -51,7 +51,7 @@
   },
   {
     "case_dates": "2020-02-07",
-    "case_names": "In re B.A., Juvenile",
+    "case_names": "In Re B.A., Juvenile",
     "download_urls": "/media/11854",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -81,7 +81,7 @@
   },
   {
     "case_dates": "2019-06-03",
-    "case_names": "In re T.L. & T.L., Juveniles",
+    "case_names": "In Re T.L. & T.L., Juveniles",
     "download_urls": "/media/11063",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -101,7 +101,7 @@
   },
   {
     "case_dates": "2018-05-04",
-    "case_names": "In re R.B., Juvenile",
+    "case_names": "In Re R.B., Juvenile",
     "download_urls": "/media/9751",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -111,13 +111,13 @@
   },
   {
     "case_dates": "2018-01-08",
-    "case_names": "In re P.K.",
+    "case_names": "In Re P.K.",
     "download_urls": "/media/9367",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "2017-272",
-    "case_name_shorts": "In re P.K."
+    "case_name_shorts": "In Re P.K."
   },
   {
     "case_dates": "2017-11-17",
@@ -131,7 +131,7 @@
   },
   {
     "case_dates": "2017-10-27",
-    "case_names": "In re Z.L., Juvenile",
+    "case_names": "In Re Z.L., Juvenile",
     "download_urls": "/media/9091",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -141,7 +141,7 @@
   },
   {
     "case_dates": "2017-01-01",
-    "case_names": "Vera P. Mikhailova v. Andrei V. Babyuk",
+    "case_names": "Vera P. Mikhailova v. Andrei v. Babyuk",
     "download_urls": "/media/7620",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -151,7 +151,7 @@
   },
   {
     "case_dates": "2017-01-01",
-    "case_names": "In re W.C., R.C., B.C. and B.C., Juveniles",
+    "case_names": "In Re W.C., R.C., B.C. and B.C., Juveniles",
     "download_urls": "/media/6363",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -161,7 +161,7 @@
   },
   {
     "case_dates": "2017-01-01",
-    "case_names": "In re M,T, and T.T., Juveniles",
+    "case_names": "In Re M,T, and T.T., Juveniles",
     "download_urls": "/media/6193",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -171,7 +171,7 @@
   },
   {
     "case_dates": "2017-01-01",
-    "case_names": "In re I.B., Juvenile",
+    "case_names": "In Re I.B., Juvenile",
     "download_urls": "/media/6055",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -181,17 +181,17 @@
   },
   {
     "case_dates": "2016-12-01",
-    "case_names": "In re T.H.",
+    "case_names": "In Re T.H.",
     "download_urls": "/media/6343",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
     "date_filed_is_approximate": false,
     "docket_numbers": "eo16-006",
-    "case_name_shorts": "In re T.H."
+    "case_name_shorts": "In Re T.H."
   },
   {
     "case_dates": "2016-12-01",
-    "case_names": "In re S.D., D.D., M.D. and Z.D., Juveniles",
+    "case_names": "In Re S.D., D.D., M.D. and Z.D., Juveniles",
     "download_urls": "/media/6294",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -201,7 +201,7 @@
   },
   {
     "case_dates": "2016-12-01",
-    "case_names": "In re L.L., Juvenile",
+    "case_names": "In Re L.L., Juvenile",
     "download_urls": "/media/6178",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -211,7 +211,7 @@
   },
   {
     "case_dates": "2016-12-01",
-    "case_names": "In re C.R., Juvenile",
+    "case_names": "In Re C.R., Juvenile",
     "download_urls": "/media/5934",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -221,7 +221,7 @@
   },
   {
     "case_dates": "2016-12-01",
-    "case_names": "In re A.H., Juvenile",
+    "case_names": "In Re A.H., Juvenile",
     "download_urls": "/media/5772",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -231,7 +231,7 @@
   },
   {
     "case_dates": "2016-11-01",
-    "case_names": "In re C.H. and J.H., Juveniles",
+    "case_names": "In Re C.H. and J.H., Juveniles",
     "download_urls": "/media/5918",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
diff --git a/tests/examples/opinions/united_states/vtsuperct_probate_example.compare.json b/tests/examples/opinions/united_states/vtsuperct_probate_example.compare.json
index 47c05f61d..73233c177 100644
--- a/tests/examples/opinions/united_states/vtsuperct_probate_example.compare.json
+++ b/tests/examples/opinions/united_states/vtsuperct_probate_example.compare.json
@@ -1,7 +1,7 @@
 [
   {
     "case_dates": "2017-09-01",
-    "case_names": "In re M.S., Juvenile",
+    "case_names": "In Re M.S., Juvenile",
     "download_urls": "/media/8846",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -11,7 +11,7 @@
   },
   {
     "case_dates": "2009-09-01",
-    "case_names": "In re Adoption of B.L.R.",
+    "case_names": "In Re Adoption of B.L.R.",
     "download_urls": "/media/5804",
     "precedential_statuses": "Published",
     "blocked_statuses": false,
@@ -21,7 +21,7 @@
   },
   {
     "case_dates": "2007-04-01",
-    "case_names": "In re Appeal of Byron Martin",
+    "case_names": "In Re Appeal of Byron Martin",
     "download_urls": "/media/5820",
     "precedential_statuses": "Published",
     "blocked_statuses": false,