def assert_fks(self, obj, expected_blank_fks, processed_stripe_ids=None):
        """
        Recursively walk through fks on obj, asserting they're not-none
        :param obj:
        :param expected_blank_fks: fields that are expected to be None
        :param processed_stripe_ids: set of objects ids already processed
        :return:
        """

        if processed_stripe_ids is None:
            processed_stripe_ids = set()

        processed_stripe_ids.add(obj.id)

        for field in obj._meta.get_fields():
            field_str = self._get_field_str(field)
            if not field_str or field_str.endswith(".djstripe_owner_account"):
                continue

            try:
                field_value = getattr(obj, field.name)
            except ObjectDoesNotExist:
                field_value = None

            if field_str in expected_blank_fks:
                self.assertIsNone(field_value, field_str)
            else:
                self.assertIsNotNone(field_value, field_str)

                if field_value.id not in processed_stripe_ids:
                    # recurse into the object if it's not already been checked
                    self.assert_fks(
                        field_value, expected_blank_fks, processed_stripe_ids
                    )

                logger.warning("checked %s", field_str)

        Recursively walk through fks on obj, asserting they're not-none
        :param obj:
        :param expected_blank_fks: fields that are expected to be None
        :param processed_stripe_ids: set of objects ids already processed
        :return:
        
tests/__init__.py