text: import pytest
  
  from awx.main.models import SystemJobTemplate
  
  
  @pytest.mark.parametrize("extra_data", [
      '{ "days": 1 }',
      '{ "days": 100 }',
      '{ "days": 0 }',
      {"days": 0},
      {"days": 1},
      {"days": 13435},
  ])
  def test_valid__clean_extra_data_system_jobs(extra_data):
      accepted, rejected, errors = SystemJobTemplate(
          job_type='cleanup_jobs'
      ).accept_or_ignore_variables(extra_data)
      assert not rejected
      assert not errors
  
  
  @pytest.mark.parametrize("extra_data", [
      '{ "days": 1.2 }',
      '{ "days": -1.2 }',
      '{ "days": -111 }',
      '{ "days": "-111" }',
      '{ "days": false }',
      '{ "days": "foobar" }',
      {"days": 1.2},
      {"days": -1.2},
      {"days": -111},
      {"days": "-111"},
      {"days": False},
      {"days": "foobar"},
  ])
  def test_invalid__extra_data_system_jobs(extra_data):
      accepted, rejected, errors = SystemJobTemplate(
          job_type='cleanup_jobs'
      ).accept_or_ignore_variables(extra_data)
      assert str(errors['extra_vars'][0]) == u'days must be a positive integer.'
  
  
  def test_unallowed_system_job_data():
      sjt = SystemJobTemplate(job_type='cleanup_jobs')
      accepted, ignored, errors = sjt.accept_or_ignore_variables({
          'days': 34,
          'foobar': 'baz'
      })
      assert 'foobar' in ignored
      assert 'days' in accepted
  
  
  def test_reject_other_prommpts():
      sjt = SystemJobTemplate()
      accepted, ignored, errors = sjt._accept_or_ignore_job_kwargs(limit="")
      assert accepted == {}
      assert 'not allowed on launch' in errors['limit'][0]
  
  
  def test_reject_some_accept_some():
      sjt = SystemJobTemplate(job_type='cleanup_jobs')
      accepted, ignored, errors = sjt._accept_or_ignore_job_kwargs(limit="", extra_vars={
          'days': 34,
          'foobar': 'baz'
      })
      assert accepted == {"extra_vars": {"days": 34}}
      assert ignored == {"limit": "", "extra_vars": {"foobar": "baz"}}
      assert 'not allowed on launch' in errors['limit'][0]
  
  