Repository: joke2k/faker
Pull request #1287 (2020-10-01 18:40:29)

Add pt_PT credit card provider
### Added pt_PT credit card provider

Added visa, mastercard and maestro bins of portugal.


Patch:
diff --git a/.bumpversion.cfg b/.bumpversion.cfg
index 5a8c398d..2a02bbc6 100644
--- a/.bumpversion.cfg
+++ b/.bumpversion.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 4.1.6
+current_version = 4.4.0
 files = VERSION faker/__init__.py docs/conf.py
 commit = True
 tag = True
diff --git a/.github/workflows/autobump.yml b/.github/workflows/autobump.yml
index 259dfbfa..2d0b55bb 100644
--- a/.github/workflows/autobump.yml
+++ b/.github/workflows/autobump.yml
@@ -14,7 +14,7 @@ jobs:
         id: waitforstatuschecks
         uses: "fcurella/gh-status-check@main"
         with:
-          ignoreContexts: coverage/coveralls
+          ignoreContexts: coverage/coveralls,continuous-integration/appveyor/branch
           ignoreActions: waitforstatuschecks
           checkInterval: 12
           githubToken: ${{ secrets.GITHUB_TOKEN }}
@@ -28,6 +28,9 @@ jobs:
           defaultPart: "patch"
           githubToken: ${{ secrets.GITHUB_TOKEN }}
       - uses: actions/checkout@v2
+        with:
+         persist-credentials: false
+         fetch-depth: 0 # otherwise, you will failed to push refs to dest repo
       - name: Get Next Version
         uses: "fcurella/gh-action-next-version@main"
         id: nextversion
@@ -36,7 +39,6 @@ jobs:
       - name: Update Changelog
         uses: "fcurella/gh-action-update-changelog@main"
         with:
-          githubToken: ${{ secrets.GITHUB_TOKEN }}
           changelogPath: "CHANGELOG.rst"
           changelogLine : 4
           currentVersion: ${{ steps.nextversion.outputs.currentVersion }}
@@ -44,5 +46,25 @@ jobs:
       - name: Bump version
         uses: "fcurella/gh-action-bump2version@main"
         with:
-          githubToken: ${{ secrets.GITHUB_TOKEN }}
           part: ${{ steps.nextpart.outputs.part }}
+      - name: Push changes
+        uses: ad-m/github-push-action@master
+        with:
+          tags: true
+          github_token: ${{ secrets.GITHUB_TOKEN }}
+      - name: Set up Python
+        uses: actions/setup-python@v2
+        with:
+          python-version: '3.x'
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip
+          pip install setuptools wheel
+      - name: Build package
+        run: |
+          python setup.py sdist bdist_wheel
+      - name: Publish package
+        uses: pypa/gh-action-pypi-publish@master
+        with:
+          user: __token__
+          password: ${{ secrets.pypi_password }}
diff --git a/.github/workflows/autodeploy.yml b/.github/workflows/autodeploy.yml
deleted file mode 100644
index 5c0880f9..00000000
--- a/.github/workflows/autodeploy.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-name: Auto Deploy
-on:
-  push:
-    branches:
-      - master
-jobs:
-  release:
-    runs-on: ubuntu-latest
-    if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
-    steps:
-      - uses: actions/checkout@v2
-      - name: Set up Python
-        uses: actions/setup-python@v2
-        with:
-          python-version: '3.x'
-      - name: Install dependencies
-        run: |
-          python -m pip install --upgrade pip
-          pip install setuptools wheel
-      - name: Build package
-        run: |
-          python setup.py sdist bdist_wheel
-      - name: Publish package
-        uses: pypa/gh-action-pypi-publish@master
-        with:
-          user: __token__
-          password: ${{ secrets.pypi_password }}
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 4c689250..685d3604 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,6 +1,30 @@
 Changelog
 =========
 
+`4.4.0 - 2020-10-02 <https://github.com/joke2k/faker/compare/v4.3.0...v4.4.0>`_
+-------------------------------------------------------------------------------
+
+* Added Company Provider for ``tr_TR`` locale. Thanks @iamnotagentleman.
+
+`4.3.0 - 2020-10-02 <https://github.com/joke2k/faker/compare/v4.2.0...v4.3.0>`_
+-------------------------------------------------------------------------------
+
+* Add job providers for ``tr_TR``. Thanks @molcay.
+
+`4.2.0 - 2020-10-02 <https://github.com/joke2k/faker/compare/v4.1.8...v4.2.0>`_
+-------------------------------------------------------------------------------
+
+* Implement color provider for ``sk_SK`` locale. Thanks @pipozzz.
+
+`4.1.8 - 2020-10-02 <https://github.com/joke2k/faker/compare/v4.1.7...v4.1.8>`_
+-------------------------------------------------------------------------------
+
+* Fix ``hu_HU`` color provider inheritance. Thanks @n1ngu.
+
+`4.1.7 - 2020-10-02 <https://github.com/joke2k/faker/compare/v4.1.6...v4.1.7>`_
+-------------------------------------------------------------------------------
+* Bigger zipcode ranges for VA, TX and MD in ``en_US``. Thanks @Antetokounpo.
+
 `4.1.6 - 2020-10-01 <https://github.com/joke2k/faker/compare/v4.1.5...v4.1.6>`_
 -------------------------------------------------------------------------------
 * Add new style ``pt_PT`` automotive plates. Thanks @gplgps.
diff --git a/RELEASE_PROCESS.rst b/RELEASE_PROCESS.rst
index 501a1cbb..68a3e12e 100644
--- a/RELEASE_PROCESS.rst
+++ b/RELEASE_PROCESS.rst
@@ -3,7 +3,7 @@ Release Process
 
 This project releases automatically every time a PR is squash-merged.
 
-The chnagelog is updated with a new entry containing the message commit, and the
+The changelog is updated with a new entry containing the message commit, and the
 library version number is incremented according the the labels on the PR:
 
 * ``bump-version:major``: Increments the MAJOR version
diff --git a/VERSION b/VERSION
index 561ad334..fdc66988 100644
--- a/VERSION
+++ b/VERSION
@@ -1,1 +1,1 @@
-4.1.6
+4.4.0
diff --git a/docs/communityproviders.rst b/docs/communityproviders.rst
index b26dc41b..6d103a1b 100644
--- a/docs/communityproviders.rst
+++ b/docs/communityproviders.rst
@@ -12,10 +12,6 @@ Here's a list of Providers written by the community:
 |               | mime-type and web server |                                  +
 |               | versions.                |                                  +
 +---------------+--------------------------+----------------------------------+
-| CloudProvider | Cloud-related data       | `faker_cloud`_                   +
-|               | generic or specialized   |                                  +
-|               | by cloud.                |                                  +
-+---------------+--------------------------+----------------------------------+
 | Wi-Fi ESSID   | Fake Wi-Fi ESSIDs.       | `faker_wifi_essid`_              +
 +---------------+--------------------------+----------------------------------+
 | Credit Score  | Fake credit score data   | `faker_credit_score`_            |
@@ -41,7 +37,6 @@ In order to be inlcuded, your provider must satisfy these requirement:
 .. _repo: https://github.com/joke2k/faker/
 .. _OSI-Approved: https://opensource.org/licenses/alphabetical
 .. _faker_web: https://pypi.org/project/faker_web/
-.. _faker_cloud: https://pypi.org/project/faker-cloud/
 .. _faker_wifi_essid: https://pypi.org/project/faker-wifi-essid/
 .. _faker_credit_score: https://pypi.org/project/faker-credit-score/
 .. _faker_microservice: https://pypi.org/project/faker-microservice/
diff --git a/docs/conf.py b/docs/conf.py
index fbe7404c..53ff5f27 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -51,9 +51,9 @@ copyright = '2014, Daniele Faraglia'
 # built documents.
 #
 # The short X.Y version.
-version = '4.1.6'
+version = '4.4.0'
 # The full version, including alpha/beta/rc tags.
-release = '4.1.6'
+release = '4.4.0'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/faker/__init__.py b/faker/__init__.py
index 6b962f93..8f2c303c 100644
--- a/faker/__init__.py
+++ b/faker/__init__.py
@@ -2,4 +2,4 @@ from faker.factory import Factory  # noqa F401
 from faker.generator import Generator  # noqa F401
 from faker.proxy import Faker  # noqa F401
 
-VERSION = '4.1.6'
+VERSION = '4.4.0'
diff --git a/faker/providers/address/en_US/__init__.py b/faker/providers/address/en_US/__init__.py
index 36c673ea..f439a99d 100644
--- a/faker/providers/address/en_US/__init__.py
+++ b/faker/providers/address/en_US/__init__.py
@@ -285,7 +285,7 @@ class Provider(AddressProvider):
         'FL': (32004, 34997), 'GA': (30001, 31999), 'HI': (96701, 96898),
         'ID': (83201, 83876), 'IL': (60001, 62999), 'IN': (46001, 47997),
         'IA': (50001, 52809), 'KS': (66002, 67954), 'KY': (40003, 42788),
-        'LA': (70001, 71232), 'ME': (3901, 4992), 'MD': (20331, 20331),
+        'LA': (70001, 71232), 'ME': (3901, 4992), 'MD': (20812, 21930),
         'MA': (1001, 2791), 'MI': (48001, 49971), 'MN': (55001, 56763),
         'MS': (38601, 39776), 'MO': (63001, 65899), 'MT': (59001, 59937),
         'NE': (68001, 68118), 'NV': (88901, 89883), 'NH': (3031, 3897),
@@ -293,8 +293,8 @@ class Provider(AddressProvider):
         'NC': (27006, 28909), 'ND': (58001, 58856), 'OH': (43001, 45999),
         'OK': (73001, 73199), 'OR': (97001, 97920), 'PA': (15001, 19640),
         'RI': (2801, 2940), 'SC': (29001, 29948), 'SD': (57001, 57799),
-        'TN': (37010, 38589), 'TX': (73301, 73301), 'UT': (84001, 84784),
-        'VT': (5001, 5495), 'VA': (20040, 20041), 'WA': (98001, 99403),
+        'TN': (37010, 38589), 'TX': (75503, 79999), 'UT': (84001, 84784),
+        'VT': (5001, 5495), 'VA': (22001, 24658), 'WA': (98001, 99403),
         'WV': (24701, 26886), 'WI': (53001, 54990), 'WY': (82001, 83128),
     }
 
diff --git a/faker/providers/color/hu_HU/__init__.py b/faker/providers/color/hu_HU/__init__.py
index abea2a05..b6b51dd3 100644
--- a/faker/providers/color/hu_HU/__init__.py
+++ b/faker/providers/color/hu_HU/__init__.py
@@ -1,7 +1,7 @@
-from faker.providers import BaseProvider
+from .. import Provider as ColorProvider
 
 
-class Provider(BaseProvider):
+class Provider(ColorProvider):
     """Implement color provider for ``hu_HU`` locale."""
 
     safe_colors = (
diff --git a/faker/providers/color/sk_SK/__init__.py b/faker/providers/color/sk_SK/__init__.py
new file mode 100644
index 00000000..64cf79d2
--- /dev/null
+++ b/faker/providers/color/sk_SK/__init__.py
@@ -0,0 +1,11 @@
+from .. import Provider as ColorProvider
+
+
+class Provider(ColorProvider):
+    """Implement color provider for ``sk_SK`` locale."""
+
+    safe_colors = (
+        'čierna', 'gaštanová', 'zelená', 'námornícka', 'olivová',
+        'fialová', 'zelenomodrá', 'limetková', 'modrá', 'strieborná',
+        'sivá', 'žltá', 'fuchsiová', 'aquamarinová', 'biela',
+    )
diff --git a/faker/providers/company/tr_TR/__init__.py b/faker/providers/company/tr_TR/__init__.py
new file mode 100644
index 00000000..e6866f45
--- /dev/null
+++ b/faker/providers/company/tr_TR/__init__.py
@@ -0,0 +1,25 @@
+from .. import Provider as CompanyProvider
+
+
+class Provider(CompanyProvider):
+    formats = (
+        '{{last_name}} {{company_suffix}}',
+        '{{last_name}} {{last_name}} {{company_suffix}}',
+        '{{large_company}}',
+    )
+    # Source: https://www.capital.com.tr/listeler/capital-500
+    large_companies = (
+        'Tüpraş', 'Türk Hava Yolları', 'Petrol Ofisi', 'Opet', 'BİM', 'Ford Otosan', 'Arçelik', 'Vestel',
+        'Toyota Otomotiv', 'Oyak Renault', 'A101 Yeni Mağzacılık', 'Turkcell', 'Türk Telekom', 'Anadolu Efes', 'Migros',
+        'LC Waikiki', 'Peak Games', 'Masomo', 'EnerjiSA', 'Tofaş', 'Şişecam', 'Selçuk Ecza', 'ŞOK Marketler', 'Petkim',
+        'Limak İnşaat', 'Aselsan', 'Havelsan', 'Roketsan', 'Şişecam',
+    )
+    company_suffixes = (
+        'A.Ş.', 'Ltd.', 'Şti.',
+    )
+
+    def large_company(self):
+        """
+        :example: 'Peak Games'
+        """
+        return self.random_element(self.large_companies)
diff --git a/faker/providers/credit_card/pt_PT/__init__.py b/faker/providers/credit_card/pt_PT/__init__.py
new file mode 100644
index 00000000..57f2e74f
--- /dev/null
+++ b/faker/providers/credit_card/pt_PT/__init__.py
@@ -0,0 +1,68 @@
+from collections import OrderedDict
+
+from .. import CreditCard
+from .. import Provider as CreditCardProvider
+
+
+class Provider(CreditCardProvider):
+    """Implementation of ``pt_PT`` locale credit card
+
+    For all methods that take ``card_type`` as an argument a random card type
+    will be used if the supplied value is ``None``. The list of valid card types
+    includes ``'visa'``, ``'mastercard'`` and ``'maestro'``.
+
+    Source: https://bincheck.org/portugal
+    """
+
+    prefix_visa = ['400131', '400190', '400817', '402192', '402947', '402956', '403005', '403006', '403007',
+                   '403008', '403271', '404520', '404530', '405758', '406170', '406475', '407548', '407549',
+                   '407575', '408237', '408239', '409842', '409843', '410000', '410344', '410345', '410553',
+                   '410557', '411635', '411700', '411701', '411869', '412487', '412488', '412489', '412657',
+                   '412782', '412990', '413014', '413793', '413871', '415158', '415159', '415170', '415171',
+                   '415174', '415175', '415194', '415195', '415238', '415272', '415273', '415403', '415404',
+                   '415405', '415440', '415441', '415569', '415920', '415961', '416952', '416963', '416970',
+                   '417005', '417091', '417092', '417337', '418847', '419022', '419682', '419683', '419684',
+                   '421149', '421510', '422080', '422240', '422241', '422414', '422417', '422597', '422869',
+                   '423392', '423393', '424118', '424184', '424208', '424661', '425509', '425510', '425906',
+                   '426150', '426360', '426370', '427256', '427304', '427729', '427770', '427867', '428139',
+                   '428184', '428185', '428186', '428187', '429711', '430240', '430241', '431926', '433390',
+                   '433391', '433511', '433512', '433513', '433599', '433618', '433622', '433966', '437886',
+                   '438257', '439070', '440637', '440644', '440645', '442664', '443977', '443978', '444224',
+                   '444227', '445961', '445962', '446140', '446144', '449389', '450915', '451156', '451166',
+                   '454755', '455250', '455290', '455292', '455658', '456811', '456812', '457031', '458058',
+                   '458059', '459432', '459433', '459449', '460340', '460341', '460342', '461247', '461248',
+                   '461249', '462731', '462732', '464406', '465964', '476066', '476067', '476068', '476069',
+                   '476070', '476071', '476329', '477920', '477921', '477922', '477947', '477989', '478062',
+                   '478063', '479702', '479736', '483088', '485672', '486449', '486457', '489434', '489485',
+                   '490772', '490830', '490831', '490832', '490841', '490863', '491213', '491546', '491547',
+                   '491613', '492194', '493402', '493480', '493800', '493801', '493830', '498800', '499968',
+                   '499969', '499986', '422239', '422041', '464409', '464408']
+
+    prefix_mastercard = ['510122', '510123', '512556', '518772', '519744', '519774', '520342', '524552',
+                         '524878', '525625', '525808', '526819', '527014', '528024', '529119', '530267',
+                         '530770', '532355', '536468', '541171', '541557', '542081', '542098', '542858',
+                         '543099', '543116', '543123', '544051', '544052', '544233', '547260', '547459',
+                         '548168', '548169', '552727', '552755', '553057', '554506', '554517', '554518',
+                         '556660', '557836', '557882', '557883', '557888']
+
+    prefix_maestro = ['501654', '501659', '670530', '670811', '670812', '676938', '676938', '677393',
+                      '677707', '670835', '670817']
+
+    credit_card_types = OrderedDict((
+        ('maestro', CreditCard('Maestro', prefix_maestro, 16, security_code='CVV2')),
+        ('mastercard', CreditCard('Mastercard', prefix_mastercard, 16, security_code='CVV2')),
+        ('visa', CreditCard('Visa', prefix_visa, 16, security_code='CVV2')),
+    ))
+
+    def credit_card_expire(self, start='now', end='+4y', date_format='%m/%y'):
+        """Generate a credit card expiry date.
+
+        This method uses |date_time_between| under the hood to generate the
+        expiry date, so the ``start`` and ``end`` arguments work in the same way
+        here as it would in that method. For the actual formatting of the expiry
+        date, |strftime| is used and ``date_format`` is simply passed
+        to that method.
+        """
+
+        expire_date = self.generator.date_time_between(start, end)
+        return expire_date.strftime(date_format)
diff --git a/faker/providers/job/tr_TR/__init__.py b/faker/providers/job/tr_TR/__init__.py
new file mode 100644
index 00000000..64330999
--- /dev/null
+++ b/faker/providers/job/tr_TR/__init__.py
@@ -0,0 +1,737 @@
+from .. import Provider as BaseProvider
+
+
+class Provider(BaseProvider):
+    """
+    Source: https://www.turkcebilgi.com/meslekler_listesi
+    """
+    jobs = [
+        "Acentacı",
+        "Acil durum yönetmeni",
+        "Adli tabip",
+        "Agronomist",
+        "Ağ yöneticisi",
+        "Aşçı",
+        "Aşçıbaşı",
+        "Ahşap tekne yapımcısı",
+        "Aile hekimi",
+        "Aktar",
+        "Akortçu",
+        "Aktör",
+        "Aktüer",
+        "Aktris",
+        "Akustikçi",
+        "Albay",
+        "Ambalajcı",
+        "Ambarcı",
+        "Ambulans şoförü",
+        "Amiral",
+        "Anahtarcı",
+        "Anestezi uzmanı",
+        "Anestezi teknikeri",
+        "Animatör",
+        "Antika satıcısı",
+        "Antropolog",
+        "Apartman yöneticisi",
+        "Araba satıcısı",
+        "Araba yıkayıcısı",
+        "Arabacı",
+        "Arabulucu",
+        "Araştırmacı",
+        "Arıcı",
+        "Arkeolog",
+        "Armatör",
+        "Arpist",
+        "Arşivci",
+        "Artist",
+        "Asansörcü",
+        "Asistan",
+        "Asker",
+        "Astrofizikçi",
+        "Astrolog",
+        "Astronom",
+        "Astronot",
+        "Astsubay",
+        "Atlet",
+        "Av bekçisi",
+        "Avcı",
+        "Avizeci",
+        "Avukat",
+        "Ayakçı (otogar, lokanta)",
+        "Ayakkabı boyacısı",
+        "Ayakkabı tamircisi",
+        "Ayakkabıcı",
+        "Ayı oynatıcısı",
+        "Araba tamircisi",
+        "Bacacı",
+        "Badanacı",
+        "Baharatçı",
+        "Bahçe bitkileri uzmanı",
+        "Bahçıvan",
+        "Bakan",
+        "Bakıcı",
+        "Bakırcı",
+        "Bakkal",
+        "Bakteriyolog",
+        "Balıkçı",
+        "Balerin",
+        "Balon pilotu",
+        "Bankacı",
+        "Banker",
+        "Barmen",
+        "Barmeyd",
+        "Basketbolcu",
+        "Başbakan",
+        "Başçavuş",
+        "Başdümenci",
+        "Başhemşire",
+        "Başkan",
+        "Başkomiser",
+        "Başpiskopos",
+        "Başrahip",
+        "Belediye başkanı",
+        "Belediye meclisi üyesi",
+        "Benzinci",
+        "Berber",
+        "Besteci",
+        "Biletçi",
+        "Bilgisayar mühendisi",
+        "Bilgisayar programcısı",
+        "Bilgisayar tamircisi",
+        "Bilim insanı",
+        "Bilirkişi",
+        "Binicilik",
+        "Biracı",
+        "Bisikletçi",
+        "Biyografi yazarı",
+        "Biyolog",
+        "Biyomedikal Mühendisi",
+        "Bobinajcı",
+        "Bombacı",
+        "Bomba imhacı",
+        "Borsacı",
+        "Borucu",
+        "Botanikçi",
+        "Boyacı",
+        "Bozacı",
+        "Böcekbilimci",
+        "Börekçi",
+        "Bulaşıkçı",
+        "Buldozer operatörü",
+        "Bütçe uzmanı",
+        "Büyükelçi",
+        "Besicilik",
+        "Bilgi İşlemci",
+        "Camcı",
+        "Cerrah",
+        "Celep",
+        "Cellat",
+        "Cost Control",
+        "Cillopçu",
+        "Cumhurbaşkanı",
+        "Çamaşırcı",
+        "Çantacı",
+        "Çarkçı",
+        "Çatıcı",
+        "Çaycı",
+        "Çevirmen",
+        "Çevrebilimci",
+        "Çevre mühendisi",
+        "Çeyizci",
+        "Çıkıkçı",
+        "Çıkrıkçı",
+        "Çiçekçi",
+        "Çiftçi",
+        "Çiftlik işletici",
+        "Çikolatacı",
+        "Çilingir",
+        "Çinici",
+        "Çitçi",
+        "Çoban",
+        "Çocuk doktoru",
+        "Çorapçı",
+        "Çöp işçisi",
+        "Çöpçü",
+        "Çırak",
+        "Çevik Kuvvet",
+        "Dadı",
+        "Daktilograf",
+        "Dalgıç",
+        "Damıtıcı",
+        "Danışman",
+        "Dansöz",
+        "Davulcu",
+        "Debbağ",
+        "Dedektif",
+        "Değirmen işçisi",
+        "Değirmenci",
+        "Demirci",
+        "Demiryolu işçisi",
+        "Denetçi",
+        "Denetleyici",
+        "Denizci",
+        "Depocu",
+        "Derici",
+        "Desinatör",
+        "Devlet memuru",
+        "Dilci",
+        "Dilenci",
+        "Diplomat",
+        "Diş hekimi",
+        "Diyetisyen",
+        "Dizgici",
+        "Doğalgazcı",
+        "Doğramacı",
+        "Doğum uzmanı",
+        "Dok işçisi",
+        "Dokumacı",
+        "Doktor",
+        "Dondurmacı",
+        "Dökümcü",
+        "Döşemeci",
+        "Dövizci",
+        "Dublajcı",
+        "Duvarcı",
+        "Dümenci",
+        "Diş teknisyeni",
+        "Ebe",
+        "Eczacı",
+        "Eczacı kalfası",
+        "Editör",
+        "Eğitimci",
+        "Eğitmen",
+        "Ekonomist",
+        "Elektrik mühendisi",
+        "Elektronik mühendisi",
+        "Elektrik-Elektronik mühendisi",
+        "Elektronik ve Haberleşme mühendisi",
+        "Elektrikçi",
+        "Eleştirmen",
+        "Embriyolog",
+        "Emlakçı",
+        "Emniyet amiri",
+        "Emniyet genel müdürü",
+        "Endüstri mühendisi",
+        "Endüstri sistemleri mühendisi",
+        "Enstrüman imalatçısı",
+        "Ergonomist",
+        "Eskici",
+        "Esnaf",
+        "Estetisyen",
+        "Etolojist",
+        "Etimolog",
+        "Etnolog",
+        "Ev hanımı",
+        "Fabrika işçisi",
+        "Fahişe",
+        "Falcı",
+        "Fermantasyon işçisi",
+        "Fıçıcı",
+        "Fırıncı",
+        "Figüran",
+        "Film yapımcısı",
+        "Film yönetmeni",
+        "Filozof",
+        "Finansör",
+        "Fizikçi",
+        "Fizyonomist",
+        "Fizyoterapist",
+        "Acil tıp teknisyeni",
+        "Fon yöneticisi",
+        "Forklift operatörü",
+        "Fotoğrafçı",
+        "Futbolcu",
+        "Gardiyan",
+        "Galerici",
+        "Garson",
+        "Gazete dağıtıcısı",
+        "Gazete satıcısı",
+        "Gazeteci",
+        "Gelir uzmanı",
+        "Gelir uzman yardımcısı",
+        "Gemici",
+        "General",
+        "Genetik mühendisi",
+        "Geyşa",
+        "Gezgin",
+        "Gezici vaiz",
+        "Gıda mühendisi",
+        "Gitarist",
+        "Gondolcu",
+        "Gökbilimci",
+        "Göz doktoru",
+        "Gözetmen",
+        "Gözlükçü",
+        "Grafiker",
+        "Gramer uzmanı",
+        "Greyder operatörü",
+        "Guru",
+        "Güfteci",
+        "Gümrük memuru",
+        "Gümrük müşaviri",
+        "Gümrük müşavir yardımcısı",
+        "Gümrük uzmanı",
+        "Gündelikçi",
+        "Güzellik uzmanı",
+        "Haberci",
+        "Haddeci",
+        "Haham",
+        "Hakem",
+        "Halıcı",
+        "Halkbilimci",
+        "Hamal",
+        "Hamamcı",
+        "Hamurkâr",
+        "Hareket memuru",
+        "Haritacı",
+        "Harita mühendisi",
+        "Hastabakıcı",
+        "Hattat",
+        "Hava trafikçisi",
+        "Havacı",
+        "Haydut",
+        "Hayvan bakıcısı",
+        "Hayvan terbiyecisi",
+        "Hemşire",
+        "Hesap uzmanı",
+        "Heykeltıraş",
+        "Hırdavatçı",
+        "Hırsız",
+        "Hidrolikçi",
+        "Hizmetçi",
+        "Hokkabaz",
+        "Host",
+        "Hostes",
+        "Hukukçu",
+        "Hurdacı",
+        "İcra memuru",
+        "İç mimar",
+        "İğneci",
+        "İhracatçı",
+        "İktisatçı",
+        "İlahiyatçı",
+        "İllüzyonist",
+        "İmam",
+        "İnsan kaynakları uzmanı",
+        "İnşaat mühendisi",
+        "İnşaatçı",
+        "İpçi",
+        "İplikçi",
+        "İstatistikçi",
+        "İstihkâmcı",
+        "İşaretçi",
+        "İşçi",
+        "İşletmeci",
+        "İşletme mühendisi",
+        "İşportacı",
+        "İş ve Uğraşı Terapisti",
+        "İtfaiyeci",
+        "İthalatçı",
+        "Jeofizik mühendisi",
+        "Jeoloji mühendisi",
+        "Jeolog",
+        "Jeomorfolog",
+        "Jinekolog",
+        "Jimnastikçi",
+        "Jokey",
+        "Kabin görevlisi",
+        "Kabuk soyucusu",
+        "Kadın berberi",
+        "Kadın terzisi",
+        "Kâğıtçı",
+        "Kahveci",
+        "Kâhya",
+        "Kalaycı",
+        "Kalıpçı",
+        "Kaloriferci",
+        "Kamarot",
+        "Kameraman",
+        "Kamyoncu",
+        "Kapı satıcısı",
+        "Kapıcı",
+        "Kaplamacı",
+        "Kaportacı",
+        "Kaptan",
+        "Kardinal",
+        "Kardiyolog",
+        "Karikatürist",
+        "Karoserci",
+        "Karpuzcu",
+        "Kasap",
+        "Kasiyer",
+        "Kat görevlisi",
+        "Kâtip",
+        "Kayıkçı",
+        "Kaymakam",
+        "Kaynakçı",
+        "Kazıcı",
+        "Kebapçı",
+        "Kemancı",
+        "Kesimci",
+        "Keskin Nişancı",
+        "Kırtasiyeci",
+        "Kimyager",
+        "Kimya mühendisi",
+        "Kitapçı",
+        "Klarnetçi",
+        "Koleksiyoncu",
+        "Komedyen",
+        "Komisyoncu",
+        "Komiser",
+        "Konserveci",
+        "Konsolos",
+        "Konsomatris",
+        "Kontrolör",
+        "Konveyör operatörü",
+        "Kopyalayıcı",
+        "Koreograf",
+        "Korgeneral",
+        "Koramiral",
+        "Korsan",
+        "Koruma görevlisi",
+        "Komiser",
+        "Komiser yardımcısı",
+        "Kozmolog",
+        "Köfteci",
+        "Kömürcü",
+        "Köpek eğiticisi",
+        "Köşe yazarı",
+        "Kuaför",
+        "Kuşçu",
+        "Kumarbaz",
+        "Kumaşçı",
+        "Kumcu",
+        "Kuru temizlemeci",
+        "Kuruyemişçi",
+        "Kurye",
+        "Kuşbilimci",
+        "Kuyumcu",
+        "Kürkçü",
+        "Kütüphaneci",
+        "Krupiye",
+        "Laborant",
+        "Laboratuvar işçisi",
+        "Lahmacuncu",
+        "Lehimci",
+        "Levazımcı",
+        "Lobici",
+        "Lokantacı",
+        "Lokomotifçi",
+        "Lostromo",
+        "Lostracı",
+        "Lokman",
+        "Madenci",
+        "Makasçı",
+        "Makastar",
+        "Maketçi",
+        "Makinist",
+        "Makine mühendisi",
+        "Makine zabiti",
+        "Makyajcı",
+        "Mali hizmetler uzmanı",
+        "Manastır baş rahibesi",
+        "Manav",
+        "Manifaturacı",
+        "Manikürcü",
+        "Manken",
+        "Marangoz",
+        "Masör",
+        "Masöz",
+        "Matador",
+        "Matbaacı",
+        "Matematikçi",
+        "Matkapçı",
+        "Medya Planlama Uzmanı",
+        "Memur",
+        "Menajer",
+        "Mermerci",
+        "Metalurji mühendisi",
+        "Meteoroloji uzmanı",
+        "Metin yazarı",
+        "Mevsimlik işçi",
+        "Meydancı",
+        "Meyhaneci",
+        "Mezarcı",
+        "Midyeci",
+        "Mikrobiyolog",
+        "Milletvekili",
+        "Mimar",
+        "Misyoner",
+        "Mobilyacı",
+        "Modacı",
+        "Model",
+        "Modelci",
+        "Modelist",
+        "Montajcı",
+        "Montör",
+        "Motor tamircisi",
+        "Motorcu",
+        "Muhabbet tellalı",
+        "Muhabir",
+        "Muhafız",
+        "Muhasebeci",
+        "Muhtar",
+        "Mumyalayıcı",
+        "Muzcu",
+        "Mübaşir",
+        "Müdür",
+        "Müezzin",
+        "Müfettiş",
+        "Müşavir",
+        "Mühendis",
+        "Müneccim",
+        "Mürebbiye",
+        "Müsteşar",
+        "Müteahhit",
+        "Mütercim",
+        "Müze müdürü",
+        "Müzik yönetmeni",
+        "Müzisyen",
+        "Nalıncı",
+        "Nakışçı",
+        "Nakliyeci",
+        "Nalbant",
+        "Nalbur",
+        "Noter",
+        "Obuacı",
+        "Ocakçı",
+        "Odacı",
+        "Oduncu",
+        "Okçu",
+        "Okul müdürü",
+        "Okutman",
+        "Operatör",
+        "Opera sanatçısı",
+        "Orgcu",
+        "Orgeneral",
+        "Orman mühendisi",
+        "Ornitolog",
+        "Otelci",
+        "Oto elektrikçisi",
+        "Oto lastik tamircisi",
+        "Oto tamircisi",
+        "Oto yedek parçacı",
+        "Overlokçu",
+        "Oymacı",
+        "Oyuncu",
+        "Oyun hostesi",
+        "Oyun yazarı",
+        "Oyuncakçı",
+        "Öğretmen",
+        "Öğretim elemanı",
+        "Öğretim görevlisi",
+        "Öğretim üyesi",
+        "Örmeci",
+        "Ön muhasebeci",
+        "Ön muhasebe sorumlusu",
+        "Ön muhasebe yardımcı elemanı",
+        "Ön büro elemanı",
+        "Özel şoför",
+        "Paketleyici",
+        "Palyaço",
+        "Pandomimci",
+        "Pansiyoncu",
+        "Pansumancı",
+        "Papa",
+        "Papaz",
+        "Paralı asker",
+        "Park bekçisi",
+        "Pastörizör",
+        "Patolog",
+        "Peçeteci",
+        "Pencereci",
+        "Perukçu",
+        "Peyzaj mimarı",
+        "Peyzaj teknikeri",
+        "Pideci",
+        "Pilavcı",
+        "Pilot",
+        "Piskopos",
+        "Piyade",
+        "Piyango satıcısı",
+        "Piyanist",
+        "Polis memuru",
+        "Polis şefi",
+        "Polisajcı",
+        "Pompacı",
+        "Postacı",
+        "Profesör",
+        "Proktolog",
+        "Protokol görevlisi",
+        "Psikiyatr",
+        "Psikolog",
+        "Psikolojik danışmanlık ve rehberlik",
+        "Paramedik",
+        "Radyolog",
+        "Redaktör",
+        "Rehber",
+        "Rejisör",
+        "Reklamcı",
+        "Rektör",
+        "Rektör yardımcısı",
+        "Remayözcü",
+        "Ressam",
+        "Resepsiyon memuru",
+        "Rot balansçı",
+        "Radyoloji teknisyeni/teknikeri",
+        "Saat tamircisi",
+        "Saatçi",
+        "Sağlık teknisyeni",
+        "Sahil koruma",
+        "Saksofoncu",
+        "Salepçi",
+        "Sanat yönetmeni",
+        "Sanayici",
+        "Sansürcü",
+        "Santral memuru",
+        "Saraç",
+        "Sarraf",
+        "Satış elemanı",
+        "Savcı",
+        "Saz şairi",
+        "Sekreter",
+        "Senarist",
+        "Sepetçi",
+        "Serbest muhasebeci mali müşavir",
+        "Ses teknisyeni",
+        "Seyis",
+        "Sınırlı baş makinist",
+        "Sicil memuru",
+        "Sigortacı",
+        "Sihirbaz",
+        "Silahçı",
+        "Silindir operatörü",
+        "Simitçi",
+        "Simyacı",
+        "Sistem mühendisi",
+        "Sistem yöneticisi",
+        "Siyasetçi",
+        "Soğuk demirci",
+        "Sokak çalgıcısı",
+        "Sokak satıcısı",
+        "Son ütücü",
+        "Sorgu hâkimi",
+        "Sosyal hizmet uzmanı",
+        "Sosyolog",
+        "Spiker",
+        "Stenograf",
+        "Stilist",
+        "Striptizci",
+        "Su tesisatçısı",
+        "Subay",
+        "Sucu",
+        "Suflör",
+        "Sulh hâkimi",
+        "Sunucu",
+        "Susuz araç yıkama",
+        "Sünnetçi",
+        "Sürveyan",
+        "Sütanne",
+        "Sütçü",
+        "Şahinci",
+        "Şair",
+        "Şapel papazı",
+        "Şapkacı",
+        "Şarap üreticisi",
+        "Şarkıcı",
+        "Şarkı sözü yazarı",
+        "Şarküter",
+        "Şekerci",
+        "Şemsiyeci",
+        "Şifre çözümleyici",
+        "Şimşirci",
+        "Şoför",
+        "Tabakçı",
+        "Tabelacı",
+        "Tahsildar",
+        "Taksici",
+        "Tarım işçisi",
+        "Tarihçi",
+        "Tasarımcı",
+        "Taşçı",
+        "Taşlayıcı",
+        "Tatlıcı",
+        "Tavukçu",
+        "Tayfa",
+        "Tefeci",
+        "Teğmen",
+        "Tekniker",
+        "Teknisyen",
+        "Teknoloji uzmani",
+        "Telefon operatörü",
+        "Telekız",
+        "Televizyon tamircisi",
+        "Tellal",
+        "Temizlikçi",
+        "Temsilci",
+        "Terapist",
+        "Tercüman",
+        "Terzi",
+        "Tesgahtar",
+        "Tesisatçı",
+        "Tesviyeci",
+        "Test mühendisi",
+        "Test pilotu",
+        "Teşrifatçı",
+        "Tiyatro yönetmeni",
+        "Tombalacı",
+        "Topçu",
+        "Tornacı",
+        "Turizmci",
+        "Tuğgeneral",
+        "Tuhafiyeci",
+        "Turşucu",
+        "Tuzcu",
+        "Tümamiral",
+        "Tümgeneral",
+        "Uçuş teknisyeni",
+        "Ulaşım sorumlusu",
+        "Ustabaşı",
+        "Uydu antenci",
+        "Uzay mühendisi",
+        "Uzay bilimcisi",
+        "Uzman Jandarma",
+        "Uzman Çavuş",
+        "Üretici",
+        "Ürolog",
+        "Ütücü",
+        "Vaiz",
+        "Vali",
+        "Vergi denetmeni",
+        "Vergi müfettişi",
+        "Vergi tahakkuk memuru",
+        "Veritabanı yöneticisi",
+        "Veri hazırlama ve kontrol işletmeni",
+        "Vestiyerci",
+        "Veteriner hekim",
+        "Veteriner sağlık teknikeri",
+        "Veteriner sağlık teknisyeni",
+        "Veznedar",
+        "Video editörü",
+        "Vinç operatörü",
+        "Vitrinci",
+        "Viyolonselci",
+        "Yarbay",
+        "Yardımcı hakem",
+        "Yardımcı hizmetli",
+        "Yardımcı pilot",
+        "Yargıç",
+        "Yatırım uzmanı",
+        "Yayıncı",
+        "Yazar",
+        "Yazı işleri müdürü",
+        "Yazılım mühendisi",
+        "Yelkenci",
+        "Yeminli mali müşavir",
+        "Yeminli tercüman",
+        "Yer gösterici",
+        "Yer teknisyeni",
+        "Yerölçmeci",
+        "Yoğurtçu",
+        "Yol bekçisi",
+        "Yorgancı",
+        "Yorumcu",
+        "Yönetici",
+        "Yüzücü",
+        "Yönetmen",
+    ]


Test patch:
diff --git a/tests/providers/test_color.py b/tests/providers/test_color.py
index fd65d6a2..0d1e8c4a 100644
--- a/tests/providers/test_color.py
+++ b/tests/providers/test_color.py
@@ -8,6 +8,7 @@ from faker.providers.color import RandomColor
 from faker.providers.color.es_ES import Provider as EsEsColorProvider
 from faker.providers.color.fa_IR import Provider as FaIrColorProvider
 from faker.providers.color.hy_AM import Provider as HyAmColorProvider
+from faker.providers.color.sk_SK import Provider as SkSkColorProvider
 
 
 class TestColorProvider:
@@ -290,3 +291,13 @@ class TestEsEs:
             safe_color_name = faker.safe_color_name()
             assert isinstance(safe_color_name, str)
             assert safe_color_name in EsEsColorProvider.safe_colors
+
+
+class TestSkSk:
+    """Test sk_SK color provider methods"""
+
+    def test_safe_color_name(self, faker, num_samples):
+        for _ in range(num_samples):
+            safe_color_name = faker.safe_color_name()
+            assert isinstance(safe_color_name, str)
+            assert safe_color_name in SkSkColorProvider.safe_colors
diff --git a/tests/providers/test_company.py b/tests/providers/test_company.py
index 0ba51c06..5731e6c8 100644
--- a/tests/providers/test_company.py
+++ b/tests/providers/test_company.py
@@ -17,6 +17,7 @@ from faker.providers.company.pl_PL import company_vat_checksum, local_regon_chec
 from faker.providers.company.pt_BR import company_id_checksum
 from faker.providers.company.ru_RU import Provider as RuRuCompanyProvider
 from faker.providers.company.ru_RU import calculate_checksum
+from faker.providers.company.tr_TR import Provider as TrTrCompanyProvider
 
 
 class TestFiFi:
@@ -353,3 +354,19 @@ class TestItIt:
             company_vat = fake.company_vat()
             assert self.vat_regex.match(company_vat)
             assert company_vat[9:12] == expected
+
+
+class TestTrTr:
+    """Test tr_TR company provider methods"""
+
+    def test_company_suffix(self, faker, num_samples):
+        for _ in range(num_samples):
+            suffix = faker.company_suffix()
+            assert isinstance(suffix, str)
+            assert suffix in TrTrCompanyProvider.company_suffixes
+
+    def test_large_companies(self, faker, num_samples):
+        for _ in range(num_samples):
+            company = faker.large_company()
+            assert isinstance(company, str)
+            assert company in TrTrCompanyProvider.large_companies
diff --git a/tests/providers/test_credit_card.py b/tests/providers/test_credit_card.py
index 11b3df83..6c2561eb 100644
--- a/tests/providers/test_credit_card.py
+++ b/tests/providers/test_credit_card.py
@@ -125,3 +125,26 @@ class TestRuRu:
             card_data = faker.credit_card_full().split('\n')
             assert re.match('[A-Za-z]+', card_data[1])
             assert card_data[4] in RuRuBankProvider.banks
+
+
+class TestPtPt:
+    """Test pt_PT credit card provider methods"""
+
+    visa_pattern = re.compile(r'4[0-9]{15}')
+    mastercard_pattern = re.compile(r'5[1-5][0-9]{14}')
+    maestro_pattern = re.compile(r'(50|67)[0-9]{14}')
+
+    def test_visa(self, faker, num_samples):
+        for _ in range(num_samples):
+            number = faker.credit_card_number('visa')
+            assert self.visa_pattern.fullmatch(number)
+
+    def test_mastercard(self, faker, num_samples):
+        for _ in range(num_samples):
+            number = faker.credit_card_number('mastercard')
+            assert self.mastercard_pattern.fullmatch(number)
+
+    def test_maestro(self, faker, num_samples):
+        for _ in range(num_samples):
+            number = faker.credit_card_number('maestro')
+            assert self.maestro_pattern.fullmatch(number)
diff --git a/tests/providers/test_job.py b/tests/providers/test_job.py
index 4bd52274..33edb985 100644
--- a/tests/providers/test_job.py
+++ b/tests/providers/test_job.py
@@ -8,6 +8,7 @@ from faker.providers.job.ja_JP import Provider as JaJpJobProvider
 from faker.providers.job.ko_KR import Provider as KoKrJobProvider
 from faker.providers.job.pt_BR import Provider as PtBrJobProvider
 from faker.providers.job.pt_PT import Provider as PtPtJobProvider
+from faker.providers.job.tr_TR import Provider as TrTrJobProvider
 
 
 class TestJobProvider:
@@ -88,3 +89,10 @@ class TestPtBr:
     def test_job(self, faker, num_samples):
         for _ in range(num_samples):
             assert faker.job() in PtBrJobProvider.jobs
+
+
+class TestTrTr:
+    """Test tr_TR job provider"""
+
+    def test_job(self, faker, num_samples):
+        assert faker.job() in TrTrJobProvider.jobs