diff --git a/Gemfile b/Gemfile index 82392a583..c5c1af641 100644 --- a/Gemfile +++ b/Gemfile @@ -65,6 +65,7 @@ group :test do gem 'chromedriver-helper' gem 'codacy-coverage', require: false gem 'selenium-webdriver' + gem 'webmock' end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index eb98a4278..ecd69693c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -44,15 +44,15 @@ GEM tzinfo (~> 1.1) addressable (2.5.2) public_suffix (>= 2.0.2, < 4.0) - ancestry (3.0.3) + ancestry (3.0.4) activerecord (>= 3.2.0) archive-zip (0.11.0) io-like (~> 0.3.0) arel (9.0.0) ast (2.4.0) aws-eventstream (1.0.1) - aws-partitions (1.106.0) - aws-sdk-core (3.35.0) + aws-partitions (1.107.0) + aws-sdk-core (3.36.0) aws-eventstream (~> 1.0) aws-partitions (~> 1.0) aws-sigv4 (~> 1.0) @@ -60,7 +60,7 @@ GEM aws-sdk-kms (1.11.0) aws-sdk-core (~> 3, >= 3.26.0) aws-sigv4 (~> 1.0) - aws-sdk-s3 (1.23.0) + aws-sdk-s3 (1.23.1) aws-sdk-core (~> 3, >= 3.26.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.0) @@ -71,14 +71,14 @@ GEM msgpack (~> 1.0) brakeman (4.3.1) builder (3.2.3) - bullet (5.7.6) + bullet (5.8.1) activesupport (>= 3.0.0) - uniform_notifier (~> 1.11.0) + uniform_notifier (~> 1.11) bundler-audit (0.6.0) bundler (~> 1.2) thor (~> 0.18) byebug (10.0.2) - capybara (3.10.0) + capybara (3.10.1) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) @@ -96,8 +96,10 @@ GEM codacy-coverage (2.1.0) simplecov coderay (1.1.2) - concurrent-ruby (1.0.5) + concurrent-ruby (1.1.1) connection_pool (2.2.2) + crack (0.4.3) + safe_yaml (~> 1.0.0) crass (1.0.4) devise (4.5.0) bcrypt (~> 3.0) @@ -124,8 +126,9 @@ GEM activerecord (>= 4.0.0) globalid (0.4.1) activesupport (>= 4.2.0) - groupdate (4.0.2) + groupdate (4.1.0) activesupport (>= 4.2) + hashdiff (0.3.7) i18n (1.1.1) concurrent-ruby (~> 1.0) image_processing (1.7.1) @@ -133,7 +136,7 @@ GEM ruby-vips (>= 2.0.13, < 3) io-like (0.3.0) jaro_winkler (1.5.1) - jbuilder (2.7.0) + jbuilder (2.8.0) activesupport (>= 4.2.0) multi_json (>= 1.2) jmespath (1.4.0) @@ -153,7 +156,7 @@ GEM mini_mime (>= 0.1.1) marcel (0.3.3) mimemagic (~> 0.3.2) - method_source (0.9.0) + method_source (0.9.1) mimemagic (0.3.2) mini_magick (4.9.2) mini_mime (1.0.1) @@ -168,7 +171,7 @@ GEM orm_adapter (0.5.0) pagy (0.21.0) parallel (1.12.1) - parser (2.5.1.2) + parser (2.5.3.0) ast (~> 2.4.0) pg (1.1.3) pg_search (2.1.2) @@ -176,14 +179,14 @@ GEM activesupport (>= 4.2) arel (>= 6) powerpack (0.1.2) - pry (0.11.3) + pry (0.12.0) coderay (~> 1.1.0) method_source (~> 0.9.0) pry-rails (0.3.6) pry (>= 0.10.4) public_suffix (3.0.3) puma (3.12.0) - rack (2.0.5) + rack (2.0.6) rack-protection (2.0.4) rack rack-test (1.1.0) @@ -217,7 +220,7 @@ GEM rb-fsevent (0.10.3) rb-inotify (0.9.10) ffi (>= 0.5.0, < 2) - redis (4.0.2) + redis (4.0.3) regexp_parser (1.2.0) responders (2.4.0) actionpack (>= 4.2.0, < 5.3) @@ -237,22 +240,17 @@ GEM ffi (~> 1.9) ruby_dep (1.5.0) rubyzip (1.2.2) - sass (3.6.0) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sassc (1.12.1) + safe_yaml (1.0.4) + sassc (2.0.0) ffi (~> 1.9.6) - sass (>= 3.3.0) - sassc-rails (1.3.0) + rake + sassc-rails (2.0.0) railties (>= 4.0.0) - sass - sassc (~> 1.9) - sprockets (> 2.11) + sassc (>= 2.0) + sprockets (> 3.0) sprockets-rails tilt - selenium-webdriver (3.14.1) + selenium-webdriver (3.141.0) childprocess (~> 0.5) rubyzip (~> 1.2, >= 1.2.2) sidekiq (5.2.2) @@ -281,7 +279,7 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - swearjar (1.2.1) + swearjar (1.3.0) thor (0.20.0) thread_safe (0.3.6) tilt (2.0.8) @@ -293,7 +291,7 @@ GEM unf_ext unf_ext (0.0.7.5) unicode-display_width (1.4.0) - uniform_notifier (1.11.0) + uniform_notifier (1.12.1) warden (1.2.7) rack (>= 1.0) web-console (3.7.0) @@ -301,6 +299,10 @@ GEM activemodel (>= 5.0) bindex (>= 0.4.0) railties (>= 5.0) + webmock (3.4.2) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff websocket-driver (0.7.0) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.3) @@ -354,9 +356,10 @@ DEPENDENCIES spring-watcher-listen (~> 2.0.0) uglifier (>= 1.3.0) web-console (>= 3.3.0) + webmock RUBY VERSION ruby 2.5.1p57 BUNDLED WITH - 1.16.6 + 1.17.1 diff --git a/app/models/prospective_student.rb b/app/models/prospective_student.rb index b3450ecdc..35cd3b2c2 100644 --- a/app/models/prospective_student.rb +++ b/app/models/prospective_student.rb @@ -38,7 +38,7 @@ class ProspectiveStudent < ApplicationRecord # enumerations enum gender: { male: 1, female: 2 } enum nationality: { turkish: 1, kktc: 2, foreign: 3 } - enum placement_type: { general: 1, additional_score: 2 } + enum placement_type: { general_score: 1, additional_score: 2 } enum additional_score: { handicapped: 1 } # custom methods diff --git a/app/models/unit.rb b/app/models/unit.rb index ee19a8ff6..fd2f4b5f3 100644 --- a/app/models/unit.rb +++ b/app/models/unit.rb @@ -37,8 +37,8 @@ class Unit < ApplicationRecord has_many :prospective_students, dependent: :destroy # validations - validates :yoksis_id, uniqueness: true, allow_blank: true, numericality: { only_integer: true } - validates :detsis_id, uniqueness: true, allow_blank: true, numericality: { only_integer: true } + validates :yoksis_id, uniqueness: true, allow_blank: true, numericality: { only_integer: true }, length: { is: 6 } + validates :detsis_id, uniqueness: true, allow_blank: true, numericality: { only_integer: true }, length: { is: 8 } validates :name, presence: true, uniqueness: { scope: %i[ancestry unit_status] } validates :duration, numericality: { only_integer: true }, allow_blank: true, inclusion: 1..8 @@ -46,16 +46,17 @@ class Unit < ApplicationRecord before_save { self.name = name.capitalize_all } # scopes - scope :active, -> { where(unit_status: UnitStatus.active) } - scope :committees, -> { where(unit_type: UnitType.committee) } - scope :departments, -> { where(unit_type: UnitType.department) } - scope :faculties, -> { where(unit_type: UnitType.faculty) } - scope :programs, -> { where(unit_type: UnitType.program) } - scope :universities, -> { where(unit_type: UnitType.university) } - scope :majors, -> { where(unit_type: UnitType.major) } - scope :institutes, -> { where(unit_type: UnitType.institute) } - scope :rectorships, -> { where(unit_type: UnitType.rectorship) } - scope :without_programs, -> { where.not(unit_type: UnitType.program) } + scope :active, -> { where(unit_status: UnitStatus.active) } + scope :partially_passive, -> { where(unit_status: UnitStatus.partially_passive) } + scope :committees, -> { where(unit_type: UnitType.committee) } + scope :departments, -> { where(unit_type: UnitType.department) } + scope :faculties, -> { where(unit_type: UnitType.faculty) } + scope :programs, -> { where(unit_type: UnitType.program) } + scope :universities, -> { where(unit_type: UnitType.university) } + scope :majors, -> { where(unit_type: UnitType.major) } + scope :institutes, -> { where(unit_type: UnitType.institute) } + scope :rectorships, -> { where(unit_type: UnitType.rectorship) } + scope :without_programs, -> { where.not(unit_type: UnitType.program) } scope :coursable, -> { departments diff --git a/app/models/unit_status.rb b/app/models/unit_status.rb index 599b84fdc..5cf382274 100644 --- a/app/models/unit_status.rb +++ b/app/models/unit_status.rb @@ -8,5 +8,10 @@ class UnitStatus < ApplicationRecord has_many :units, dependent: :nullify # scopes - scope :active, -> { where(code: 1) } + scope :passive, -> { where(code: 0) } + scope :active, -> { where(code: 1) } + scope :partially_passive, -> { where(code: 2) } + scope :closed, -> { where(code: 3) } + scope :archived, -> { where(code: 4) } + scope :no_guide_code, -> { where(code: 5) } end diff --git a/app/services/xokul/connection.rb b/app/services/xokul/connection.rb index 7929f1c80..612cfa1d3 100644 --- a/app/services/xokul/connection.rb +++ b/app/services/xokul/connection.rb @@ -11,11 +11,11 @@ module Connection def self.request(path, params: {}) response = RestClient.get( URI.join(BASE_URL, path).to_s, - header: { + headers: { Authorization: "Bearer #{BEARER_TOKEN}", 'Content-Type': 'application/json' }, - payload: params, + payload: params.to_json, use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_PEER ) diff --git a/app/views/account/duties/_form.html.erb b/app/views/account/duties/_form.html.erb index 4402b7717..8c976e37b 100644 --- a/app/views/account/duties/_form.html.erb +++ b/app/views/account/duties/_form.html.erb @@ -16,7 +16,10 @@ <%= f.input :employee_id, collection: @user.employees, label_method: :title_name, required: true %>
- <%= f.input :unit_id, collection: Unit.all, required: true %> + <%= f.input :unit_id, + collection: Unit.active.without_programs.order(:name), + required: true, + label_method: lambda { |unit| "#{unit.name} (#{unit.parent.try(:name)})" } %>
<%= f.input :start_date, required: true %> diff --git a/app/views/account/employees/_form.html.erb b/app/views/account/employees/_form.html.erb index c30f8fe8b..80ad81fd8 100644 --- a/app/views/account/employees/_form.html.erb +++ b/app/views/account/employees/_form.html.erb @@ -13,7 +13,8 @@ <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
- <%= f.input :title_id, collection: Title.all, required: true %> + <%= f.input :title_id, collection: Title.order(:name), required: true, + label_method: lambda { |title| title.name + ' - ' + title.branch } %>
<%= f.input :active %> diff --git a/app/views/account/positions/_form.html.erb b/app/views/account/positions/_form.html.erb index 026674787..f695b2e3d 100644 --- a/app/views/account/positions/_form.html.erb +++ b/app/views/account/positions/_form.html.erb @@ -16,7 +16,7 @@ <%= f.input :duty_id, collection: @user.duties, label_method: :unit_name, required: true %>
- <%= f.input :administrative_function_id, collection: AdministrativeFunction.all, required: true %> + <%= f.input :administrative_function_id, collection: AdministrativeFunction.order(:name), required: true %>
<%= f.input :start_date, required: true %> diff --git a/app/views/student_management/prospective_students/index.html.erb b/app/views/student_management/prospective_students/index.html.erb index 1c9124038..26a6a3746 100644 --- a/app/views/student_management/prospective_students/index.html.erb +++ b/app/views/student_management/prospective_students/index.html.erb @@ -30,7 +30,7 @@ <%= prospective_student.meb_status ? t('.graduated') : t('.not_graduated_or_unknown') %> <%= prospective_student.military_status ? t('.unproblematic') : t('.must_see_recruiting_office') %> <%= prospective_student.obs_status ? t('.unproblematic') : t('.student_in_a_different_unit') %> - <%= prospective_student.student_entrance_type.name %> + <%= prospective_student.student_entrance_type.try(:name) %> <%= link_to_show(prospective_student_path(prospective_student)) %> diff --git a/app/views/student_management/prospective_students/show.html.erb b/app/views/student_management/prospective_students/show.html.erb index c018f96d8..af66ad057 100644 --- a/app/views/student_management/prospective_students/show.html.erb +++ b/app/views/student_management/prospective_students/show.html.erb @@ -9,7 +9,7 @@ <%= t('.student_entrance_type') %> - <%= @prospective_student.student_entrance_type.name %> + <%= @prospective_student.student_entrance_type.try(:name) %> <%= t('.unit') %> diff --git a/app/views/units/_form.html.erb b/app/views/units/_form.html.erb index 5238b4cdf..a15baa4db 100644 --- a/app/views/units/_form.html.erb +++ b/app/views/units/_form.html.erb @@ -33,7 +33,7 @@ <%= f.association :unit_instruction_type %>
- <%= f.input :duration,collection: 1..8 %> + <%= f.input :duration, collection: 1..8 %>
<%= f.association :unit_type %> @@ -43,7 +43,11 @@ <%= f.association :district, collection: City.includes(:districts).order(:name), as: :grouped_select, group_method: :districts, group_label_method: :name, input_html: { id: 'district_list' } %>
- <%= f.input :parent_id, as: :select, collection: Unit.all.order('name ASC'), input_html: { id: 'parent_unit_list' } %> + <%= f.input :parent_id, as: :select, + collection: Unit.partially_passive.or(Unit.active).order(:name), + input_html: { id: 'parent_unit_list' }, + label_method: lambda {|unit| "#{unit.name} (#{unit.parent.try(:name)})"} + %>
<%= f.button :submit, class: 'btn btn-outline-success btn-sm' %> diff --git a/config/locales/models/student_management/en.yml b/config/locales/models/student_management/en.yml index 95b18c863..a32c53863 100644 --- a/config/locales/models/student_management/en.yml +++ b/config/locales/models/student_management/en.yml @@ -62,7 +62,7 @@ en: turkish: Turkish Citizen placement_types: additional_score: Additional Scored - general: General + general_score: General simple_form: labels: prospective_student: diff --git a/config/locales/models/student_management/tr.yml b/config/locales/models/student_management/tr.yml index 995af4b55..a8a25595e 100644 --- a/config/locales/models/student_management/tr.yml +++ b/config/locales/models/student_management/tr.yml @@ -62,7 +62,7 @@ tr: turkish: Türk Vatandaşı placement_types: additional_score: Ek Puanlı - general: Genel + general_score: Genel simple_form: labels: prospective_student: diff --git a/db/schema.rb b/db/schema.rb index 806478fc1..7ba24ba5e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -595,7 +595,7 @@ t.datetime "last_sign_in_at" t.inet "current_sign_in_ip" t.inet "last_sign_in_ip" - t.datetime "password_changed_at", default: -> { "now()" }, null: false + t.datetime "password_changed_at", default: -> { "CURRENT_TIMESTAMP" }, null: false t.string "slug", limit: 255 t.string "preferred_language", limit: 2, default: "tr" t.integer "articles_count", default: 0, null: false diff --git a/doc/helpers/javascripts/dynamic_select.md b/doc/helpers/javascripts/dynamic_select.md index e69de29bb..8e18e7e88 100644 --- a/doc/helpers/javascripts/dynamic_select.md +++ b/doc/helpers/javascripts/dynamic_select.md @@ -0,0 +1,192 @@ +Dynamic Select +============== + +Uygulamanızda `selectbox` türü inputlar kullanarak ilişkisel verileri +görüntüleme ve seçebilme işlemlerini hızlı ve kolay bir şekilde yapılması +sağlayan yardımcı bir js modülüdür. + +Temel görevi yukarıda belirtilen seçim işlemleri yapabilmek için yazılmasımanız +gereken `change` event'larını ve `ajax` isteklerini parametrik olarak yönetmenizi +sağlamaktır. + +Yukarıda anlatılan görevini örneklememiz gerekirse; +sayfanızda `Ülkeler`, `Şehirler` ve `İlçeler` adında 3 adet selectbox türünde +input'unuzun olduğunu varsayalım. Burada sizinde tahmin edebileceğiniz +ülkenin şehirleri, şehirlerin ise ilçeleri var. Bir ülke seçildiğinde ona bağlı +şehirlerin `Şehirler` selectbox'ın görüntülenmesi gerekiyor, bu arada eğer +`İlçeler` selectbox'ında veri varsa bununda sıfırlanması gerekmekiyor, +aynı durum il seçimi içinde geçerli. + +Sayfamıza bu işlevselliği kazandırmak için aşağıda iki örnek var. + +```erb +
+ <%= select_tag(:country_id, + options_from_collection_for_select(Country.all, :id, :name), + class: 'form-control') %> +
+
+ <%= select_tag(:city_id, + [], + disabled: true, + class: 'form-control') %> +
+
+ <%= select_tag(:district_id, + [], + disabled: true, + class: 'form-control') %> +
+``` + +### Örnek 1. DynamicSelect Kullanmadan + +```js + +$(document).ready(function() { + $("#country_id").change(function() { + var country_id = $(this).val(); + if (country_id) { + var path = '/api/v1/counties' + country_id + '/cities' + $.getJSON(path, function(response){ + var options = ''; + $.each(response, function (index, value) { + options += ''; + }) + $("#city_id").html(options); + $('#city_id').attr("disabled", false); + }) + } + else { + $("#city_id, #district_id").html('') + $("#city_id").prepend(""); + $("#city_id, #district_id").attr('disabled', true) + } + }); + + $("#city_id").change(function() { + var city_id = $(this).val(); + if (city_id) { + var path = '/api/v1/cities' + city_id + '/district' + $.getJSON(path, function(response){ + var options = ''; + $.each(response, function (index, value) { + options += ''; + }) + $("#district_id").html(options); + $("#district_id").prepend(""); + $('#district_id').attr("disabled", false); + }) + } + else { + $("#district_id").html('') + $("#district_id").attr('disabled', true) + } + }); +}); + +``` + + +### Örnek 2. DynamicSelect Kullanarak + +```js +$(document).ready(function() { + var parameters = [ + { + el: '#country_id', + target: '#city_id', + params: { 'country_id': '#country_id' }, + source: '/api/locations/countries/:country_id/cities/', + reset_selectors: '#city_id, #district_id', + placeholder: 'Şehir Seçiniz' + }, + { + el: '#city_id', + target: '#district_id', + params: { 'city_id': '#city_id' }, + source: '/api/locations/cities/:city_id/districts', + reset_selectors: '#district_id', + placeholder: 'İlçe Seçiniz' + } + ] + var dynamicSelectHelper = new DynamicSelect(parameters) + dynamicSelectHelper.init() +}); +``` + +Yukarıdaki örneklerde de görüldüğü gibi `DynamicSelect` yardımcı js mödülü +kullanılarak çok daha az kodla ve anlaşılır bir şekilde bu işlevselliği +kazandırmış olduk. + +DynamicSelect Parametreleri ve Kullanımı +======================================== + +### Genel Parametre Yapısı + +```js +{ + el: '#city_id', + target: '#district_id', + params: { 'city_id': '#city_id' }, + source: '/api/cities/:city_id/districts', + reset_selectors: '#reset', + label_attribute: 'name', + value_attribute: 'id', + placeholder: 'Placeholder' +} +``` + +- **el** + `change` event'ının tanımlanacağı elementin hangisi olacağını belirlemek için + kullanılan parametredir. **Doldurulması zorunludur.** + +- **target** + `change` event'ının tetiklenmesi sonrasında bu olaydan etkilenecek elementin + belirlenmesini sağlayan parametredir. **Doldurulması zorunludur.** + +- **params** + `source` belirlenirken kullanılmak istenen parametrelerin belirlenmesi sağlayan, + object türünde değer alan bir parametredir. `source` alanına parametre geçirmek + isteniyorsa **Doldurulması zorunludur.** + + **Örnek:** + + ```js + params: { + source_alanında_kullanılacak_key: değeri_kullanılacak_elementin_seçicisi + } + ``` + `source` alanında `:source_alanında_kullanılacak_key` olarak parametre geçirilebilir. + +- **source** + Ajax isteğin yapılacağı kaynağı belirlemek için kullanılan parametredir. `source` + alanına parametre geçirilmek isteniyorsa `params` parametresi kullanılmalıdır. + **Doldurulması zorunludur.** + +- **reset_selectors** + `change` event esnasında resetlenmesini istediğiniz elementlerin belirlenebildiği + parametredir. **Opsiyoneldir.** + + Resetleme işleminde aşağıdaki cod parçacığı çalıştırılır. + + ```js + elements.html('') + elements.attr('disabled', true) + ``` + +- **label_attribute** + Ajax isteği sonucunda dönen json datasındaki hangi niteliğin option text'i olarak + görüntülenmesi gerektiğini belirleyen parametredir. Varsayılan olarak `name` + niteliği belirlenmiştir. `name` dışında farklı bir niteliğin görüntülenmesi + gerekiyorsa, bu parametre kullanılmalıdır. + +- **value_attribute** + Ajax isteği sonucunda dönen json datasındaki hangi niteliğin option değeri olarak + görüntülenmesi gerektiğini belirleyen parametredir. Varsayılan olarak `id` + niteliği belirlenmiştir. `id` dışında farklı bir niteliğin option değeri olarak + belirlenmesi gerekiyorsa, bu parametre kullanılmalıdır. + +- **placeholder** + `selectbox`'lara placeholder eklemek için kullanılan parametredir. Bu parametreye + verieln değer `target` elementi içindir. **Opsiyoneldir.** \ No newline at end of file diff --git a/doc/support/rest_client.md b/doc/support/rest_client.md index 4560f35c1..4fbd1e768 100644 --- a/doc/support/rest_client.md +++ b/doc/support/rest_client.md @@ -1 +1,54 @@ -TODO: @huseyin +`RestClient` +============= + +`RestClient` modülü basit bir HTTP ve REST istemcisidir. Arayüzünde aşağıdaki +HTTP metotlarını destekleyen modül metotları bulunur. + +- DELETE +- GET +- PATCH +- POST +- PUT + +Tüm metotlar prototip olarak şöyle: + +```ruby +method(url, headers: {}, payload: nil, **http_options) +``` + +Genel kullanımı şu şekilde: + +```ruby +url = 'http://localhost' + +RestClient.get(url) +RestClient.post(url, headers: { foo: 'bar' }, payload: { baz: 'bar' }) +``` + +İstemci, içeride `net/http` kitaplığını kullanır ve bu değiştirilebilir +değildir. Prototipte görünen `http_object`, içteki sarmalanmış olan bu `http` +nesnesine ayar geçirmek için kullanılır. Tipik kullanım senaryosu SSL ayarlarıdır. Geçersiz bir ayar gönderilirse +`RestClient::UnsupportedHTTPOptionError` sınıfıyla birlikte bir hata mesajı +"raise" edilir. + +```ruby +require 'openssl' + +url = 'https://localhost' +RestClient.get(url, use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_PEER) +``` + +Geçerli HTTP ayarları ve öntanımlı değerleri: + +|Option |Default value | +|--------------|---------------------------| +|`open_timeout`|`nil` | +|`use_ssl` |`false` | +|`verify_mode` |`OpenSSL::SSL::VERIFY_NONE`| + +**Not:** Authentication için temel "HTTP Authentication" şeması kullanılmalı. + +```ruby +url = 'https://localhost' +RestClient.get(url, headers: { Authorization: 'Bearer ' }, use_ssl: true) +``` diff --git a/lib/support/rest_client.rb b/lib/support/rest_client.rb index 362d6b87b..9e3d7c160 100644 --- a/lib/support/rest_client.rb +++ b/lib/support/rest_client.rb @@ -2,8 +2,8 @@ module RestClient SUPPORTED_HTTP_METHODS = %i[ - get delete + get patch post put @@ -11,40 +11,59 @@ module RestClient private_constant :SUPPORTED_HTTP_METHODS - class Request - class Error < StandardError; end + class Error < StandardError; end - class HTTPMethodError < Error; end + class HTTPMethodError < Error; end - attr_accessor :method, :url + class UnmarshalJSONError < Error; end - def initialize(method:, url:, **options) - @method = method - @url = url + class UnsupportedHTTPOptionError < Error; end - build_http_object options - end + class Request + SUPPORTED_HTTP_OPTIONS = { + open_timeout: nil, + use_ssl: false, + verify_mode: OpenSSL::SSL::VERIFY_NONE + }.freeze + + private_constant :SUPPORTED_HTTP_OPTIONS # rubocop:disable Style/IfUnlessModifier - def execute(header: {}, payload: {}) + def initialize(method, url, headers = {}, **http_options) + @method = method + @url = url + @headers = headers + unless method.in?(SUPPORTED_HTTP_METHODS) - raise HTTPMethodError, "Unsupported HTTP method: #{method}" + raise HTTPMethodError, "unsupported HTTP method: #{method}" end - klass = "Net::HTTP::#{method.capitalize}".constantize - request = klass.new @url, header - - Response.new @http.request request, payload.to_json + build_http_object http_options end # rubocop:enable Style/IfUnlessModifier + def execute(payload = nil) + klass = "Net::HTTP::#{method.capitalize}".constantize + request = klass.new url, headers + Response.new @http.request(request, payload) + end + + protected + + attr_reader :method, :url, :headers + private - def build_http_object(options) - @uri = URI.parse(url) - @http = Net::HTTP.new @uri.host, @uri.port - @http.use_ssl = options[:use_ssl] || false - @http.verify_mode = options[:verify_mode] || nil + def build_http_object(http_options) + uri = URI.parse(url) + @http = Net::HTTP.new uri.host, uri.port + + unsupported_options = http_options.keys - SUPPORTED_HTTP_OPTIONS.keys + unless unsupported_options.empty? + raise UnsupportedHTTPOptionError, "unsupported HTTP options: #{unsupported_options}" + end + + http_options.each { |option, value| @http.send "#{option}=", value } end end @@ -62,7 +81,9 @@ def error! end def unmarshal_json - body && JSON.parse(body) + JSON.parse(body || '') + rescue JSON::ParserError + raise UnmarshalJSONError, 'response body is not parseable' end end @@ -71,10 +92,8 @@ def unmarshal_json module_function SUPPORTED_HTTP_METHODS.each do |method| - define_method(method) do |url, header: {}, payload: {}, **options| - Request.new(method: method, url: url, **options).execute( - header: header, payload: payload - ) + define_method(method) do |url, headers: {}, payload: nil, **http_options| + Request.new(method, url, headers, **http_options).execute(payload) end end end diff --git a/tenant/omu/config/coding.yml b/tenant/omu/config/coding.yml index a32e6b134..f0385763e 100644 --- a/tenant/omu/config/coding.yml +++ b/tenant/omu/config/coding.yml @@ -37,3 +37,9 @@ reservations: - key: yoksis_id value: 168861 reservation: 203 + - key: yoksis_id + value: 168652 + reservation: 307 + - key: yoksis_id + value: 244883 + reservation: 607 diff --git a/tenant/omu/db/src/det.yml b/tenant/omu/db/src/det.yml index 001c3188f..d37009634 100644 --- a/tenant/omu/db/src/det.yml +++ b/tenant/omu/db/src/det.yml @@ -708,6 +708,8 @@ related_yoksis_id: 169985 district_id: Vezirköprü abbreviation: VEZİRKÖPRÜ-MYO-MALZEME-BB + issues: + - İlişkili bölüm ve başkanlık isimleri farklı - name: Vezirköprü Meslek Yüksekokulu Sekreterliği detsis_id: 48974914 @@ -890,6 +892,8 @@ related_yoksis_id: 122392 district_id: Atakum abbreviation: ÇS-AUM-MD + issues: + - İlişkili merkez ve müdürlük isimleri farklı - name: Çocuk Eğitimi Uygulama Ve Araştırma Merkezi Müdürlüğü detsis_id: 87320973 @@ -1924,6 +1928,8 @@ related_yoksis_id: 122391 district_id: Atakum abbreviation: GE-AUM-MD + issues: + - Bağlı bulunduğu merkez ve müdürlük isimleri farklı - name: Güzel Sanatlar Bölüm Başkanlığı detsis_id: 54143312 @@ -2322,7 +2328,7 @@ parent_detsis_id: 24155143 related_yoksis_id: 122161 district_id: Atakum - abbreviation: TİB-TESFİR-ADB + abbreviation: TİB-TEFSİR-ADB - name: İlahiyat Fakülte Disiplin Kurulu detsis_id: 76774637 @@ -3716,6 +3722,8 @@ related_yoksis_id: 122238 district_id: Atakum abbreviation: VETERİNER-KÖB-MİKRO-ADB + issues: + - Anabilim dalı veterinerlikte, başkanlık enstitüde - name: Veterinerlik Parazitolojisi Anabilim Dalı Başkanlığı detsis_id: 19311194 @@ -5948,7 +5956,7 @@ district_id: Atakum abbreviation: SAĞLIK-BİLİM-BTB-ADB issues: - - Tıp'ta aynı isimli anabilim dalı bşk + - Tıp'ta aynı isimli anabilim dalı başkanlığı - name: Basın Yayın Ve Halkla İlişkiler Birimi detsis_id: 45563598 @@ -6202,7 +6210,7 @@ district_id: Atakum abbreviation: SAĞLIK-BİLİM-VBESİN-ADB issues: - - Veterinerlikte aynı isimli anabilim dalı bşk + - Veterinerlikte aynı isimli anabilim dalı başkanlığı - name: Yayın, Kütüphane Ve Dokümantasyon Birimi detsis_id: 49972110 @@ -6875,8 +6883,6 @@ related_yoksis_id: district_id: abbreviation: BAFRA-MYO-SEK - issues: - - tamamen mükerrer, biri silinebilir - name: Personel İşleri Birimi detsis_id: 63263995 @@ -8061,7 +8067,7 @@ district_id: Atakum abbreviation: DİŞ-KLİNİK-ORTO-ADB issues: - - Aynı isimli ABD sağlık-bilim'de + - Aynı isimli anabilim dalı SAĞLIK-BİLİM'de - name: Bilgi İşlem Birimi detsis_id: 86248111 diff --git a/tenant/omu/db/src/yok.yml b/tenant/omu/db/src/yok.yml index 033da4c5a..87a752e1d 100644 --- a/tenant/omu/db/src/yok.yml +++ b/tenant/omu/db/src/yok.yml @@ -17,7 +17,7 @@ issues: - Üst birim olan Yabancı Diller Yüksekokulu kapatılmış görünüyor notes: - - YDİL eki Rektörlük altındaki 169457 yoksis numaralı birimie verildi + - YDİL eki Rektörlük altındaki 169457 yoksis numaralı birimine verildi - name: Ondokuz Mayıs Üniversitesi yoksis_id: 121946 @@ -319,6 +319,8 @@ parent_yoksis_id: 242252 osym_id: 108251335 abbreviation: ALAÇAM-MYO-BHS-ÇMH-PR-UZ + issues: + - Kuruluş tarihi hatalı - name: Toptan Ve Perakende Satış Bölümü yoksis_id: 317311 @@ -410,6 +412,8 @@ parent_yoksis_id: 205956 osym_id: 108251195 abbreviation: ALAÇAM-MYO-UH-PH-PR-UZ + issues: + - Kuruluş tarihi hatalı - name: Posta Hizmetleri Pr. (İö) yoksis_id: 240435 @@ -423,6 +427,8 @@ parent_yoksis_id: 205956 osym_id: 108270932 abbreviation: ALAÇAM-MYO-UH-PH-PR-2 + issues: + - Kuruluş tarihi hatalı - name: Yönetim Ve Organizasyon Bölümü yoksis_id: 153820 @@ -462,6 +468,8 @@ parent_yoksis_id: 153820 osym_id: 108270923 abbreviation: ALAÇAM-MYO-YO-L-PR-2 + issues: + - Kuruluş tarihi hatalı - name: Ali Fuad Başgil Hukuk Fakültesi yoksis_id: 128074 @@ -559,6 +567,8 @@ parent_yoksis_id: 140231 osym_id: abbreviation: KAMU-CMH-AD + issues: + - Kuruluş tarihi hatalı - name: Ceza Ve Ceza Usul Hukuku Anabilim Dalı yoksis_id: 140275 @@ -899,6 +909,8 @@ parent_yoksis_id: 122355 osym_id: abbreviation: BAFRA-MYO-EL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Finans Bankacılık Ve Sigortacılık Bölümü yoksis_id: 282775 @@ -912,6 +924,8 @@ parent_yoksis_id: 122355 osym_id: abbreviation: BAFRA-MYO-FİNANS + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Muhasebe Ve Vergi Bölümü yoksis_id: 169471 @@ -951,6 +965,8 @@ parent_yoksis_id: 122355 osym_id: abbreviation: BAFRA-MYO-MKG + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Otel, Lokanta Ve İkram Hizmetleri Bölümü yoksis_id: 254507 @@ -990,6 +1006,8 @@ parent_yoksis_id: 122355 osym_id: abbreviation: BAFRA-MYO-VET + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: İktisadi Ve İdari Bilimler Bölümü yoksis_id: 128052 @@ -1109,6 +1127,8 @@ parent_yoksis_id: 284516 osym_id: abbreviation: BALLICA-MYO-UH + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Yönetim Ve Organizasyon Bölümü yoksis_id: 296414 @@ -1122,6 +1142,8 @@ parent_yoksis_id: 284516 osym_id: abbreviation: BALLICA-MYO-YO + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Bölgesel Kalkınma Ve Stratejik Araştırmalar Uygulama Ve Araştırma Merkezi yoksis_id: 169418 @@ -1293,6 +1315,8 @@ parent_yoksis_id: 121997 osym_id: abbreviation: DİŞ-KLİNİK-ODR-AD + issues: + - Kuruluş tarihi hatalı - name: Ortodonti Anabilim Dalı yoksis_id: 122000 @@ -1423,6 +1447,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: EFST-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Eğitim Programları Ve Öğretim (Yl) (Tezli) yoksis_id: 207884 @@ -1449,6 +1475,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: EPO-YZ + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Eğitim Yönetimi (Dr) yoksis_id: 327630 @@ -1462,6 +1490,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: EY-DR + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Eğitim Yönetimi (Yl) (Tezli) yoksis_id: 327629 @@ -1475,6 +1505,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: EY-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Eğitim Yönetimi (Yl) (Tezsiz) (Uzaktan Öğretim) yoksis_id: 327678 @@ -1488,6 +1520,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: EY-YZ-UZ + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Eğitim Yönetimi (Yl) (Tezsiz) (İö) yoksis_id: 327631 @@ -1501,6 +1535,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: EY-YZ-2 + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Eğitimin Felsefi, Sosyal Ve Tarihi Temelleri (Dr) yoksis_id: 376129 @@ -1527,6 +1563,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: FENBİL-DR + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Fen Bilgisi Eğitim (Yl) (Tezli) yoksis_id: 267753 @@ -1540,6 +1578,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: FENBİL-YL + issues: + - Kuruluş tarihi hatalı - name: Fen Bilgisi Eğitim (Yl) (Tezsiz) (Uzaktan Öğretim) yoksis_id: 244484 @@ -1657,6 +1697,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: PDR-YL-ORDU + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Resim-İş Eğitimi (Dr) yoksis_id: 230808 @@ -1735,6 +1777,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: SINIF-YZ-2 + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Sosyal Bilgiler Eğitimi (Dr) yoksis_id: 327681 @@ -1748,6 +1792,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: SOSYALBİL-DR + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Sosyal Bilgiler Eğitimi (Yl) (Tezli) yoksis_id: 327632 @@ -1761,6 +1807,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: SOSYALBİL-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Sosyal Bilgiler Eğitimi (Yl) (Tezsiz) (Uzaktan Öğretim) yoksis_id: 244485 @@ -1787,6 +1835,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: SOSYALBİL-YZ-2 + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Tarih Eğitimi (Yl) (Tezli) yoksis_id: 213373 @@ -1839,6 +1889,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: TÜRKÇE-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Yabancı Diller Eğitimi Anabilim Dalı yoksis_id: 211120 @@ -1878,6 +1930,8 @@ parent_yoksis_id: 174846 osym_id: abbreviation: İLKMAT-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: İlköğretim Sınıf Öğretmenliği (Yl) (Tezsiz) (İö) yoksis_id: 235186 @@ -2073,6 +2127,8 @@ parent_yoksis_id: 122097 osym_id: 108290142 abbreviation: MÜZİK-PR-KKTC + issues: + - Kuruluş tarihi hatalı - name: Resim-İş Eğitimi Anasanat Dalı yoksis_id: 122098 @@ -2790,6 +2846,8 @@ parent_yoksis_id: 122386 osym_id: abbreviation: FİZİK-YL + issues: + - Kuruluş tarihi hatalı - name: Fizik (Yl) (Tezsiz) yoksis_id: 234095 @@ -2842,6 +2900,8 @@ parent_yoksis_id: 122386 osym_id: abbreviation: GIDA-DR-ORDU + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Gıda Mühendisliği (Yl) (Tezli) yoksis_id: 211297 @@ -2894,6 +2954,8 @@ parent_yoksis_id: 122386 osym_id: abbreviation: HARİTA-YL + issues: + - Kuruluş tarihi hatalı - name: Hesaplamalı Bilimler (Dr) yoksis_id: 255368 @@ -2972,6 +3034,8 @@ parent_yoksis_id: 122386 osym_id: abbreviation: KİMYA-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Makine Mühendisliği (Dr) yoksis_id: 209678 @@ -3286,6 +3350,8 @@ parent_yoksis_id: 122386 osym_id: abbreviation: UÇAK-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Yenilenebilir Enerji Ve Uygulamaları Anabilim Dalı (Disiplinlerarası) yoksis_id: 303063 @@ -3873,6 +3939,8 @@ parent_yoksis_id: 122017 osym_id: abbreviation: FİZİK-KATI-AD + issues: + - "Katı Hal" olarak yazılmalı - name: Nükleer Fizik Anabilim Dalı yoksis_id: 122021 @@ -5069,6 +5137,8 @@ parent_yoksis_id: 232413 osym_id: 108290133 abbreviation: SERAMİK-PR + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Havacılık Ve Uzay Teknolojileri Uygulama Ve Araştırma Merkezi yoksis_id: 233015 @@ -5342,6 +5412,8 @@ parent_yoksis_id: 169598 osym_id: 108270959 abbreviation: HAVZA-MYO-YO-İY-PR-2 + issues: + - Kuruluş tarihi hatalı - name: İnşaat Bölümü yoksis_id: 169596 @@ -5760,6 +5832,8 @@ parent_yoksis_id: 122204 osym_id: 108211036 abbreviation: HARİTA-PR-KKTC + issues: + - Kuruluş tarihi hatalı - name: Jeodezi Anabilim Dalı yoksis_id: 122206 @@ -6347,6 +6421,8 @@ parent_yoksis_id: 208604 osym_id: abbreviation: PEYZAJ + issues: + - Kuruluş tarihi hatalı - name: Peyzaj Mimarlığı Anabilim Dalı yoksis_id: 328482 @@ -6373,6 +6449,8 @@ parent_yoksis_id: 208604 osym_id: abbreviation: İÇMİMAR + issues: + - Kuruluş tarihi hatalı - name: İç Mimarlık Anabilim Dalı yoksis_id: 319351 @@ -6841,6 +6919,8 @@ parent_yoksis_id: 168851 osym_id: 108250301 abbreviation: SAMSUN-MYO-OTEL-TURİZM-PR + issues: + - Kuruluş tarihi hatalı - name: Turizm Ve Otel İşletmeciliği Pr. (İö) yoksis_id: 320498 @@ -6945,6 +7025,8 @@ parent_yoksis_id: 169841 osym_id: 108251123 abbreviation: SAMSUN-MYO-TASARIM-GRAFİK-PR + issues: + - Kuruluş tarihi hatalı - name: Teknik Programlar Bölümü yoksis_id: 122361 @@ -6971,6 +7053,8 @@ parent_yoksis_id: 122360 osym_id: abbreviation: SAMSUN-MYO-TEKSTİL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Çocuk Bakımı Ve Gençlik Hizmetleri Bölümü yoksis_id: 215482 @@ -7166,6 +7250,8 @@ parent_yoksis_id: 122387 osym_id: abbreviation: BESLENME-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Besin Hijyeni Ve Teknolojisi (Dr) yoksis_id: 169576 @@ -7335,6 +7421,8 @@ parent_yoksis_id: 122387 osym_id: abbreviation: VETERİNER-JİNEKOLOJİ-YL + issues: + - s/Vinekoloji/Jinekoloji - name: Dölerme Ve Suni Tohumlama (Dr) yoksis_id: 169574 @@ -7712,6 +7800,8 @@ parent_yoksis_id: 122387 osym_id: abbreviation: VETERİNER-MİKRO-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Mikrobiyoloji Anabilim Dalı (Disiplinlerarası) yoksis_id: 280440 @@ -7803,6 +7893,8 @@ parent_yoksis_id: 122387 osym_id: abbreviation: VETERİNER-PARAZİT-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Patoloji (Dr) yoksis_id: 169561 @@ -7959,6 +8051,8 @@ parent_yoksis_id: 122387 osym_id: abbreviation: SAĞLIKYÖN-YZ-2 + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Su Ürünleri Hastalıkları (Yl) (Tezli) yoksis_id: 261143 @@ -8284,6 +8378,8 @@ parent_yoksis_id: 121946 osym_id: abbreviation: SAĞLIK + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Beslenme Ve Diyetetik Bölümü yoksis_id: 293578 @@ -8297,6 +8393,8 @@ parent_yoksis_id: 293577 osym_id: abbreviation: BESLENME + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Beslenme Bilimleri Anabilim Dalı yoksis_id: 293587 @@ -8323,6 +8421,8 @@ parent_yoksis_id: 293578 osym_id: 108211115 abbreviation: BESLENME-PR + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Diyetetik Anabilim Dalı yoksis_id: 293583 @@ -8401,6 +8501,8 @@ parent_yoksis_id: 293577 osym_id: abbreviation: EBELİK + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Ebelik Anabilim Dalı yoksis_id: 321512 @@ -8427,6 +8529,8 @@ parent_yoksis_id: 293580 osym_id: 108211124 abbreviation: EBELİK-PR + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Hemşirelik Bölümü yoksis_id: 293581 @@ -8440,6 +8544,8 @@ parent_yoksis_id: 293577 osym_id: abbreviation: HEMŞİRELİK + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Cerrahi Hastalıklar Hemşireliği Anabilim Dalı yoksis_id: 293595 @@ -8505,6 +8611,8 @@ parent_yoksis_id: 293581 osym_id: 108211133 abbreviation: HEMŞİRELİK-PR + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Hemşirelikte Yönetim Anabilim Dalı yoksis_id: 293600 @@ -8609,6 +8717,8 @@ parent_yoksis_id: 293577 osym_id: abbreviation: SOSYALHİZMET + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Sosyal Hizmet Anabilim Dalı yoksis_id: 321514 @@ -8700,6 +8810,8 @@ parent_yoksis_id: 240437 osym_id: 108251044 abbreviation: SAĞLIK-MYO-SBH-YAŞLI-PR + issues: + - Kuruluş tarihi hatalı - name: Yaşlı Bakımı Pr. (İö) yoksis_id: 240439 @@ -8713,6 +8825,8 @@ parent_yoksis_id: 240437 osym_id: 108270898 abbreviation: SAĞLIK-MYO-SBH-YAŞLI-PR-2 + issues: + - Kuruluş tarihi hatalı - name: Tıbbi Hizmetler Ve Teknikler Bölümü yoksis_id: 169645 @@ -8856,6 +8970,8 @@ parent_yoksis_id: 169645 osym_id: 108270977 abbreviation: SAĞLIK-MYO-THT-TGT-PR-2 + issues: + - Kuruluş tarihi hatalı - name: Tıbbi Laboratuvar Teknikleri Pr. yoksis_id: 244308 @@ -8869,6 +8985,8 @@ parent_yoksis_id: 169645 osym_id: 108250831 abbreviation: SAĞLIK-MYO-THT-TLT-PR + issues: + - Kuruluş tarihi hatalı - name: İlk Ve Acil Yardım Pr. yoksis_id: 229073 @@ -8988,6 +9106,8 @@ parent_yoksis_id: 122388 osym_id: abbreviation: DDR-YZ-2 + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Endüstri İlişkileri Anabilim Dalı yoksis_id: 207834 @@ -9248,6 +9368,8 @@ parent_yoksis_id: 122388 osym_id: abbreviation: SPORYÖN-DR + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Spor Yöneticiliği (Yl) (Tezli) yoksis_id: 281995 @@ -9261,6 +9383,8 @@ parent_yoksis_id: 122388 osym_id: abbreviation: SPORYÖN-YL + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Siyaset Bilimi Ve Kamu Yönetimi (Yl) (Tezsiz) (Uzaktan Öğretim) yoksis_id: 267770 @@ -9274,6 +9398,8 @@ parent_yoksis_id: 122388 osym_id: abbreviation: SBKY-YZ-UZ + issues: + - Kuruluş tarihi hatalı - name: Tarih (Dr) yoksis_id: 169484 @@ -10080,6 +10206,8 @@ parent_yoksis_id: 121959 osym_id: abbreviation: TIP-CERRAHİ-ÜROLOJİ-ÇOCUK-BD + issues: + - Çocuk Ürolojisi Bilim Dalı ile benzer, mükerrerlik kontrol edilmeli - name: İlk Ve Acil Yardım Anabilim Dalı yoksis_id: 121962 @@ -10654,6 +10782,8 @@ parent_yoksis_id: 121965 osym_id: abbreviation: TIP-DAHİLİ-ÇSH-META-BD + issues: + - İsimde kısaltma yapılmamalı - name: Çocuk Nefrolojisi Bilim Dalı yoksis_id: 169243 @@ -11110,9 +11240,10 @@ unit_type_id: Anabilim Dalı parent_yoksis_id: 121985 osym_id: - abbreviation: TIP-TEMEL-ETİK-AD-M + abbreviation: TIP-TEMEL-ETİK-AD-DİĞER issues: - Mükerrer Anabilim Dalı adı + - Kuruluş tarihi hatalı - name: Tıp Pr. yoksis_id: 228132 @@ -11386,6 +11517,8 @@ parent_yoksis_id: 169317 osym_id: abbreviation: VETERİNER-KLİNİK-İÇH-AD + issues: + - Kuruluş tarihi hatalı - name: Veterinerinerlik Doğum Ve Jinekolojisi Anabilim Dalı yoksis_id: 331656 @@ -11399,6 +11532,9 @@ parent_yoksis_id: 169317 osym_id: abbreviation: VETERİNER-KLİNİK-JİNEKOLOJİ-AD + issues: + - "Veterinerlik" ismi düzeltilmeli + - VETERİNER-KÖB ve VETERİNER-KLİNİK altında aynı isimli Anabilim Dalı - name: Klinik Öncesi Bilimler Bölümü yoksis_id: 140285 @@ -11438,6 +11574,8 @@ parent_yoksis_id: 140285 osym_id: abbreviation: VETERİNER-KÖB-CERRAHİ-AD + issues: + - Kuruluş tarihi hatalı - name: Veterinerlik Doğum Ve Jinekolojisi Anabilim Dalı yoksis_id: 122243 @@ -12313,6 +12451,8 @@ parent_yoksis_id: 215486 osym_id: 108251362 abbreviation: YEŞİLYURT-MYO-ELEKTRO-BİYO-PR + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Elektronik Teknolojisi Pr. yoksis_id: 215487 @@ -12456,6 +12596,8 @@ parent_yoksis_id: 215488 osym_id: 108270986 abbreviation: YEŞİLYURT-MYO-KİMYA-TEKNO-PR-2 + issues: + - Kuruluş tarihi hatalı - name: Makine Ve Metal Teknolojileri Bölümü yoksis_id: 202463 @@ -12534,6 +12676,8 @@ parent_yoksis_id: 215492 osym_id: 108270738 abbreviation: YEŞİLYURT-MYO-MOTOR-OTO-PR-2 + issues: + - Kuruluş tarihi hatalı - name: Ziraat Fakültesi yoksis_id: 122258 @@ -12859,6 +13003,8 @@ parent_yoksis_id: 122258 osym_id: abbreviation: TARIMAK + issues: + - İsim "Mühendisliği" olarak düzeltimeli - name: Tarım Makineleri Anabilim Dalı yoksis_id: 122280 @@ -13041,6 +13187,8 @@ parent_yoksis_id: 122267 osym_id: abbreviation: TARLABİTKİ-TAHIL-AD + issues: + - İsimdeki "Yemeklik" yazımı hatalı - name: Tarla Bitkileri Anabilim Dalı yoksis_id: 122268 @@ -13275,6 +13423,8 @@ parent_yoksis_id: 237237 osym_id: 108251186 abbreviation: TİCARET-MYO-BHS-ÇMH-PR + issues: + - Kuruluş tarihi hatalı - name: Çağrı Merkezi Hizmetleri Pr. (İö) yoksis_id: 294078 @@ -13405,6 +13555,8 @@ parent_yoksis_id: 229371 osym_id: 108270995 abbreviation: TİCARET-MYO-FİNANS-BANKA-PR-2 + issues: + - Kuruluş tarihi hatalı - name: Hukuk Bölümü yoksis_id: 257433 @@ -13508,7 +13660,9 @@ unit_type_id: Bölüm parent_yoksis_id: 293682 osym_id: - abbreviation: TİCARET-MYO-BBY + abbreviation: İNSAN-BBY + issues: + - Üst birimi olan Çarşamba İnsan Ve Toplum Bilimleri Fakültesi pasif görünüyor - name: Bilgi Ve Belge Yönetimi Anabilim Dalı yoksis_id: 334067 @@ -13521,7 +13675,7 @@ unit_type_id: Anabilim Dalı parent_yoksis_id: 334066 osym_id: - abbreviation: TİCARET-MYO-BBY-AD + abbreviation: İNSAN-BBY-AD - name: Çevre Sorunları Uygulama Ve Araştırma Merkezi yoksis_id: 122392 @@ -14354,6 +14508,8 @@ parent_yoksis_id: 122164 osym_id: abbreviation: TİB-TASAVVUF-ST-BD + issues: + - TİB-KELAM ve TİB-TASAVVUF altında aynı isimli ABD - name: Tasavvuf Tarihi Bilim Dalı yoksis_id: 168728 @@ -14379,7 +14535,7 @@ unit_type_id: Anabilim Dalı parent_yoksis_id: 122158 osym_id: - abbreviation: TİB-TESFİR-AD + abbreviation: TİB-TEFSİR-AD - name: Kıraat Bilim Dalı yoksis_id: 168723 @@ -14392,7 +14548,7 @@ unit_type_id: Bilim Dalı parent_yoksis_id: 122161 osym_id: - abbreviation: TİB-TESFİR-KIRAAT-BD + abbreviation: TİB-TEFSİR-KIRAAT-BD - name: Tefsir Bilim Dalı yoksis_id: 168724 @@ -14405,7 +14561,7 @@ unit_type_id: Bilim Dalı parent_yoksis_id: 122161 osym_id: - abbreviation: TİB-TESFİR-BD + abbreviation: TİB-TEFSİR-BD - name: Tefsir Usulü Ve Tarihi Bilim Dalı yoksis_id: 168725 @@ -14418,7 +14574,7 @@ unit_type_id: Bilim Dalı parent_yoksis_id: 122161 osym_id: - abbreviation: TİB-TESFİR-TUT-BD + abbreviation: TİB-TEFSİR-TUT-BD - name: İslam Hukuku Anabilim Dalı yoksis_id: 122162 @@ -14589,7 +14745,7 @@ unit_type_id: Bölüm parent_yoksis_id: 122157 osym_id: - abbreviation: İDKABE-M + abbreviation: İDKABE-DİĞER issues: - Mükerrer bölüm adı @@ -14891,6 +15047,8 @@ parent_yoksis_id: 204805 osym_id: abbreviation: RST-AD + issues: + - "Radyo, Sinema Ve Televizyon" olarak düzeltilmeli - name: Radyo, Televizyon Ve Sinema Pr. yoksis_id: 294037 @@ -14904,6 +15062,8 @@ parent_yoksis_id: 204805 osym_id: 108211081 abbreviation: RST-PR + issues: + - "Radyo, Sinema Ve Televizyon" olarak düzeltilmeli - name: Yeni Medya Ve İletişim Tasarımı Bölümü yoksis_id: 282786 @@ -14917,6 +15077,8 @@ parent_yoksis_id: 169371 osym_id: abbreviation: YMİT + issues: + - Kuruluş tarihi tırnak içinde yazılmamalı - name: Yeni Medya Ve İletişim Tasarımı Anabilim Dalı yoksis_id: 323146 @@ -14943,4 +15105,3 @@ parent_yoksis_id: 121946 osym_id: abbreviation: İSGMH-AUM - diff --git a/test/controllers/units_controller_test.rb b/test/controllers/units_controller_test.rb index fb3e0ef4c..4dfe3c201 100644 --- a/test/controllers/units_controller_test.rb +++ b/test/controllers/units_controller_test.rb @@ -29,7 +29,7 @@ class UnitsControllerTest < ActionDispatch::IntegrationTest post units_path params: { unit: { name: 'Test Unit', - yoksis_id: 200, + yoksis_id: 200_000, founded_at: '1.1.2018', duration: 1, unit_type_id: unit_types(:faculty).id, @@ -45,7 +45,7 @@ class UnitsControllerTest < ActionDispatch::IntegrationTest unit = Unit.last assert_equal 'Test Unit', unit.name - assert_equal 200, unit.yoksis_id + assert_equal 200_000, unit.yoksis_id assert_equal 'Fakülte', unit.unit_type.try(:name) assert_equal units(:omu), unit.parent assert_redirected_to unit_path(unit) @@ -63,7 +63,7 @@ class UnitsControllerTest < ActionDispatch::IntegrationTest patch unit_path(unit), params: { unit: { name: 'Test Unit Update', - yoksis_id: 300, + yoksis_id: 300_000, founded_at: '1.1.2018', duration: 2, unit_type_id: unit_types(:research_center).id, @@ -78,7 +78,7 @@ class UnitsControllerTest < ActionDispatch::IntegrationTest unit.reload assert_equal 'Test Unit Update', unit.name - assert_equal 300, unit.yoksis_id + assert_equal 300_000, unit.yoksis_id assert_equal 'Araştırma ve Uygulama Merkezi', unit.unit_type.try(:name) assert_equal units(:cbu), unit.parent assert_redirected_to unit_path(unit) diff --git a/test/integration/account_settings_page_flow_test.rb b/test/integration/account_settings_page_flow_test.rb new file mode 100644 index 000000000..b487d0ee1 --- /dev/null +++ b/test/integration/account_settings_page_flow_test.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'test_helper' + +class AccountSettingsFlowTest < ActionDispatch::IntegrationTest + setup do + @user = users(:serhat) + login_as(@user, scope: :user, run_callbacks: false) + end + + SUPPORTED_SCREEN_RESOLUTIONS.each do |resolution| + test "can update account password with a valid password under a #{resolution} screen" do + page.driver.browser.manage.window.resize_to(*resolution) + visit(edit_user_registration_path) + { + password: 'password', + password_confirmation: 'password', + current_password: '123456' + }.each do |key, value| + fill_in("user[#{key}]", with: value) + end + click_button(t('helpers.submit.user.update')) + assert_equal t('devise.registrations.updated'), page.find('div', class: 'toast-message').text + end + + test "can not update account password with a missing password under a #{resolution} screen" do + page.driver.browser.manage.window.resize_to(*resolution) + visit(edit_user_registration_path) + { + password: 'password', + password_confirmation: 'password' + }.each do |key, value| + fill_in("user[#{key}]", with: value) + end + click_button(t('helpers.submit.user.update')) + assert_not page.has_content?('Please fill out this field.') + end + end +end diff --git a/test/models/unit_test.rb b/test/models/unit_test.rb index f2e90f9aa..7102caf81 100644 --- a/test/models/unit_test.rb +++ b/test/models/unit_test.rb @@ -58,7 +58,7 @@ class UnitTest < ActiveSupport::TestCase # callbacks test 'callbacks must titlecase the name for a unit' do unit = units(:omu).dup - unit.update!(yoksis_id: 1234, name: 'wonderunit department') + unit.update!(yoksis_id: 123_459, name: 'wonderunit department') assert_equal unit.name, 'Wonderunit Department' end diff --git a/test/support/rest_client_test.rb b/test/support/rest_client_test.rb new file mode 100644 index 000000000..049eeda8f --- /dev/null +++ b/test/support/rest_client_test.rb @@ -0,0 +1,90 @@ +# frozen_string_literal: true + +require 'test_helper' + +class RestClientTest < ActiveSupport::TestCase + setup do + @insecure_url = 'http://example.com' + @secure_url = 'https://example.com' + end + + %i[ + delete + get + patch + post + put + ].each do |method| + test "makes sure that :#{method} works correctly" do + stub_request method, @insecure_url + + assert RestClient.send method, @insecure_url + end + end + + test 'makes sure that http options work correctly' do + stub_request :post, @secure_url + + assert RestClient.post @secure_url, use_ssl: true + end + + test 'raises error if called with unsupported method' do + url = @insecure_url + '/method_error' + stub_request :get, url + + assert_raise RestClient::HTTPMethodError do + RestClient.const_get(:Request).new(:foo, url).execute + end + end + + test 'raises error if called with unsupported http options' do + url = @insecure_url + '/options_error' + stub_request :get, url + + assert_raise RestClient::UnsupportedHTTPOptionError do + RestClient.get url, foo: 'bar', baz: 'bar' + end + end + + test 'makes sure that :code and :body work correctly' do + url = @insecure_url + '/ok' + stub_request(:get, url).to_return status: 200 + + response = RestClient.get url + + assert_equal response.code, 200 + assert_empty response.body + end + + test 'makes sure that :unmarshal_json works correctly' do + json_url = @insecure_url + '/json' + text_url = @insecure_url + '/text' + + stub_request(:get, json_url).to_return body: '{ "foo": "bar" }' + stub_request(:get, text_url).to_return body: 'foo' + + json_response = RestClient.get json_url + text_response = RestClient.get text_url + + assert_equal json_response.unmarshal_json, 'foo' => 'bar' + assert_raise RestClient::UnmarshalJSONError do + text_response.unmarshal_json + end + end + + test 'checks whether the request header is correct' do + url = @secure_url + '/headers' + stub_request(:get, url).with headers: { foo: 'bar' } + + assert RestClient.get url, headers: { foo: 'bar' }, use_ssl: true + end + + test 'makes sure that :error! works correctly' do + url = @insecure_url + '/fail' + stub_request(:post, url).to_return status: 500 + + assert_raise Net::HTTPFatalError do + RestClient.post(url).error! + end + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index d1f0c91c1..48a221271 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -19,6 +19,9 @@ require 'capybara/rails' require 'capybara/minitest' +require 'webmock/minitest' +WebMock.allow_net_connect! + module ActiveSupport class TestCase include AbstractController::Translation